JDBC 通过 ResultSet 执行查询操作

对数据库的查询操作,一般需要返回查询结果,在程序中,JDBC 为我们提供了ResultSet 接口来专门处理查询结果集

使用 ResultSet 的步骤:

  1. 加载数据库驱动程序:Class.forName (驱动程序类)

  2. 通过用户名密码和连接地址获取数据库连接对象:DriverManager.getConnection (连接地址,用户名,密码)

  3. 构造查询 SQL 语句

  4. 调用 Statement 对象的 executeQuery(sql) 可以得到结果集

  5. resultSet 实际上返回的就是一张数据表。有一个指针指向数据表的第一行的前面

  6. 处理结果

    • 可以调用 next() 方法检测下一行是够有效。若有效该方法返回 true,且指针下移。相当于 Interator 对象的 hasNext() 和 next() 方法的结合体
    • 当指针定位到一行时,可以通过 getXxx(index) 或 getXxx(columnName) 获得每一列的值。例如:getInt(1),getString("name");
  7. ResultSet 也需要关闭资源

// 表结构
create database mydb; # 创建数据库

use mydb;#使用数据库

create table customer_table( #创建分类表
id int PRIMARY KEY AUTO_INCREMENT,  
name varchar(100),
age varchar(100),
birth DATE
);
class MyTest {
    // 关闭数据库资源(注意关闭要从里到外)
    public void releaseDB(ResultSet resultSet, Statement statement, Connection connection) {
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        if (statement != null) {
            try {
                statement.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    // 获取数据库连接
    public Connection myConnection() throws Exception {
        String driverClass = "com.mysql.jdbc.Driver";
        String jdbcUrl = "jdbc:mysql://localhost:3306/mydb";
        String user = "user";
        String password = "password";

        Class.forName(driverClass);
        Connection connection = DriverManager.getConnection(jdbcUrl, user, password);
        return connection;
    }
    public void  testResultSet(){
        Connection conn = null;
        Statement statement = null;
        ResultSet rs = null;
        try{
            // 1. 获得Connection
            conn = myConnection();
            // 2. 获取Statement
            statement = conn.createStatement();
            // 3. 准备SQL
            String sql = "select id,name,email,birth from customers where id = 4";
            // 4. 执行查询,得到ResultSet
            rs = statement.executeQuery(sql);
            // 5. 处理ResultSet
            while(rs.next()){
                int id = rs.getInt(1);
                String name = rs.getString("name");
                String email = rs.getString(3);
                Date birth = rs.getData(4);
                System.out.println(id);
                System.out.println(name);
                System.out.println(email);
                System.out.println(birth);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            releaseDB.release(rs,statement,conn);
        }
    }

    // 可以执行的sql:update、insert、delete
    public void myStatement() throws SQLException {
        Connection conn = null;
        Statement statement = null;
        try {
            // 1. 获取数据库连接
            conn = myConnection();
            // 2. 准备执行的SQL
            String sql = "Insert into table(name,email,birth) values('xyz','[email protected]','xxxx-xx-xx')";
            // 3. 执行SQL(注意执行的SQL可以是INSERT、UPDATE或DELETE。但不能是SELECT)
            // 1)获取操作SQL语句的Statement对象
            // 通过调用Connection的createStatement()方法来获取
            statement = conn.createStatement();
            // 2)调用Statement对象的executeUpdate(sql)执行SQL语句进行插入
            statement.executeUpdate(sql);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (statement != null) {
                try {
                    statement.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

ResultSetMetaData类

利用ResultSet的getMetaData的方法可以获得ResultSetMetaData对象,ResultSetMetaData存储了 ResultSet对象中列的类型和属性信息的对象。

常见API

// 方法说明:获取指定列的名称
getColumnName(int column):
// 方法说明:返回当前ResultSet对象中的列数
getColumnCount():
// 获取用于打印输出和显示的指定列的建议标题。
String getColumnLabel(int column)
public void myTest01() throws ClassNotFoundException, SQLException {
    String driverClass = "com.mysql.jdbc.Driver";
    String jdbcUrl = null;
    String user = null;
    String password = null;
    Class.forName(driverClass);
    Connection connection = DriverManager.getConnection(jdbcUrl, user, password);
    String sql = "SELECT flow_id flowId, type, id_card idCard, "
                + "exam_card examCard, student_name studentName, "
                + "location, grade " + "FROM examstudent WHERE flow_id = ?";
    PreparedStatement preparedStatement = null;
    ResultSet resultSet = null;
    preparedStatement = connection.prepareStatement(sql);
    preparedStatement.setInt(1, 5);
    resultSet = preparedStatement.executeQuery();
    ResultSetMetaData rsmd = resultSet.getMetaData();
    String columnName = rsmd.getColumnName(1); // 获取指定列的名称
    int columCount = rsmd.getColumnCount();// 返回当前ResultSet对象中的列数
    String columnLabel= rsmd.getColumnLabel(1);//获取用于打印输出和显示的指定列的建议标题。
    }

你可能感兴趣的:(JDBC 通过 ResultSet 执行查询操作)