Java ResultSet接口的用法(附带实例)
Java 程序中,ResultSet 是用于存储查询结果的接口。
在 SQL 语句中,select 语句可以查询数据库中的结果,查询的结果都需要使用 ResultSet 接口进行接收并展示,如下图所示:

图 1 查询过程
在前文已经讲解过数据库的新增操作,如果现在进行数据库查询操作,可以使用 PreparedStatement 接口中的 executeQuery() 方法完成,该方法返回值类型是 ResultSet 接口的对象,里面存放 SQL 的查询结果。
ResultSet 接口常用的操作方法如下表所示:
ResultSet 对象使用完成之后需要关闭,关闭的方式和 Connection 接口、Statement 接口一样。这段代码在后面也会使用,所以将其提取到公共代码 BaseDAO 类的 closeAll() 方法中,代码如下:
接下来,通过案例来演示 ResultSet 接口的使用:
ResultSet 接口的 next() 方法的作用是将光标从当前位置向下移动一行。光标最初位于第 1 行之前,第 1 次调用 next() 方法使第 1 行成为当前行,第 2 次调用 next() 方法使第 2 行成为当前行,依此类推。通过循环获取所有数据行即可将数据库中的所有的数据获取出来,当所有的行循环完之后,next() 方法会返回 false,从而退出循环。
在 SQL 语句中,select 语句可以查询数据库中的结果,查询的结果都需要使用 ResultSet 接口进行接收并展示,如下图所示:

图 1 查询过程
在前文已经讲解过数据库的新增操作,如果现在进行数据库查询操作,可以使用 PreparedStatement 接口中的 executeQuery() 方法完成,该方法返回值类型是 ResultSet 接口的对象,里面存放 SQL 的查询结果。
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
ResultSet 接口的 next() 方法的作用是将光标从当前位置向下移动一行。光标最初位于第 1 行之前,第 1 次调用 next() 方法使第 1 行成为当前行,第 2 次调用 next() 方法使第 2 行成为当前行,依此类推。通过循环获取所有数据行即可将数据库中的所有的数据获取出来,当所有的行循环完之后,next() 方法会返回 false,从而退出循环。