首页 > 编程笔记 > Java笔记 阅读:3

Java ResultSet接口的用法(附带实例)

Java 程序中,ResultSet 是用于存储查询结果的接口。

在 SQL 语句中,select 语句可以查询数据库中的结果,查询的结果都需要使用 ResultSet 接口进行接收并展示,如下图所示:


图 1 查询过程

在前文已经讲解过数据库的新增操作,如果现在进行数据库查询操作,可以使用 PreparedStatement 接口中的 executeQuery() 方法完成,该方法返回值类型是 ResultSet 接口的对象,里面存放 SQL 的查询结果。

ResultSet 接口常用的操作方法如下表所示:

表:ResultSet 接口的常用操作方法
方法 方法描述
int getInt(int columnIndex) throws SQLException 以整数形式按列的编号取得指定列的内容
int getInt(String columnName) throws SQLException 以整数形式取得指定列的内容
float getFloat(int columnIndex) throws SQLException 以浮点数的形式按列的编号取得指定列的内容
Float getFloat(String columnName) throws SQLException 以浮点数的形式取得指定列的内容
String getString(int columnIndex) throws SQLException 以字符串的形式按列的编号取得指定列的内容
String getString(String columnName) throws SQLException 以字符串的形式取得指定列的内容
Date getDate(int columnIndex) throws SQLException 以Date的形式按列的编号取得指定列的内容
Date getDate(String columnName) throws SQLException 以Date的形式取得指定列的内容

ResultSet 对象使用完成之后需要关闭,关闭的方式和 Connection 接口、Statement 接口一样。这段代码在后面也会使用,所以将其提取到公共代码 BaseDAO 类的 closeAll() 方法中,代码如下:
package com.aaa.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

public class BaseDAO {
    // 定义MySQL的数据库驱动程序
    public static final String DRIVER = "com.mysql.jdbc.Driver";
    // 数据库连接字符串
    public static final String URL = "jdbc:mysql://school?useUnicode=true&characterEncoding=utf-8";
    public static final String USER = "root"; // 数据库服务器账号
    public static final String PWSD = "root"; // 数据库服务器密码
    // 数据库连接方法
    public static Connection getConnection() {
        Connection con = null;
        try {
            Class.forName(DRIVER); // 加载驱动类
            con = DriverManager.getConnection(URL, USER, PWSD); // 获取连接
        } catch (ClassNotFoundException e) {
            System.out.println("加载失败"); // 如果有异常会执行
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("连接数据库错误");
            e.printStackTrace();
        }
        return con;
    }

    public static void closeAll(Connection con, Statement stmt, ResultSet resultSet) {
        try {
            if (resultSet != null) {
                resultSet.close();
                System.out.println("关闭resultSet");
            }
            // 此处省略Connection、Statement的关闭方法
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }
}

接下来,通过案例来演示 ResultSet 接口的使用:
import com.aaa.util.BaseDAO;
import java.sql.*;

public class Demo {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        try {
            conn = BaseDAO.getConnection();
            String sql = "select id,name,gender,age from students";
            statement = conn.prepareStatement(sql);
            // 执行数据库查询操作,并实例化ResultSet对象
            resultSet = statement.executeQuery();
            // 拿到实例化对象之后对结果进行打印
            while (resultSet.next()) {
                // 指针下移
                int id = resultSet.getInt("id");
                // 获取id内容
                String name = resultSet.getString("name");
                // 获取name内容
                String gender = resultSet.getString("gender");
                // 获取性别内容
                int age = resultSet.getInt("age");
                // 获取年龄内容
                System.out.print("获取到的id值:" + id + " ");
                System.out.print("获取到的name值:" + name + " ");
                System.out.print("获取到的gender值:" + gender + " ");
                System.out.print("获取到的age值:" + age + " ");
                System.out.println(); // 换行
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            BaseDAO.closeAll(conn, statement, resultSet);
        }
    }
}
程序的运行结果如下:

获取到的id值:1  获取到的name值:张三  获取到的gender值:男  获取到的age值:18
获取到的id值:2  获取到的name值:李四  获取到的gender值:男  获取到的age值:20

实例中,执行查询的时候调用的是 PreparedStatement 接口的 executeQuery() 方法,并将查询结果返回给 ResultSet 接口。

ResultSet 接口的 next() 方法的作用是将光标从当前位置向下移动一行。光标最初位于第 1 行之前,第 1 次调用 next() 方法使第 1 行成为当前行,第 2 次调用 next() 方法使第 2 行成为当前行,依此类推。通过循环获取所有数据行即可将数据库中的所有的数据获取出来,当所有的行循环完之后,next() 方法会返回 false,从而退出循环。

相关文章