处理结果集
执行SQL语句后,需要对结果集进行处理。本章节主要涵盖以下内容:设置结果集类型、在结果集中定位、获取结果集光标位置、获取结果集数据以及示例步骤。
设置结果集类型
不同类型的结果集具有不同的应用场景,应用程序需要根据实际情况选择合适的结果集类型。在执行SQL语句时,应先创建相应的语句对象,其中部分创建方法支持设置结果集类型。java.sql.Connection接口提供了三种方法,创建语句对象且支持设置结果集类型,如下所示:
1 2 3 4 5 6 7 8 | //创建一个Statement对象,该对象将生成具有给定类型和并发性的ResultSet对象。 createStatement(int resultSetType, int resultSetConcurrency); //创建一个PreparedStatement对象,该对象将生成具有给定类型和并发性的ResultSet对象。 prepareStatement(String sql, int resultSetType, int resultSetConcurrency); //创建一个CallableStatement对象,该对象将生成具有给定类型和并发性的ResultSet对象。 prepareCall(String sql, int resultSetType, int resultSetConcurrency); |
| 参数 | 描述 |
|---|---|
| resultSetType | 表示结果集的类型,有以下三种:
说明: ResultSet对象从数据库中获取了数据之后,即使类型是ResultSet.TYPE_SCROLL_SENSITIVE,也不会看到由其他事务在这之后引起的改变。调用ResultSet的refreshRow()方法,可获取当前光标所指的最新数据。 |
| resultSetConcurrency | 表示结果集的并发,有以下两种:
|
在结果集中定位
ResultSet对象包含一个指向当前数据行的光标,初始状态位于结果集第一行之前。调用next()方法将光标移动至下一行,当已无下一行时,该方法返回false,因此可将其用于while循环中迭代结果集。对于可滚动结果集,JDBC驱动程序提供特定的定位方式,支持将光标移动至任意指定行。定位方法如表2所示。
| 方法 | 描述 |
|---|---|
| next() | 把ResultSet光标向下移动一行。 |
| previous() | 把ResultSet光标向上移动一行。 |
| beforeFirst() | 把ResultSet光标定位到第一行之前。 |
| afterLast() | 把ResultSet光标定位到最后一行之后。 |
| first() | 把ResultSet光标定位到第一行。 |
| last() | 把ResultSet光标定位到最后一行。 |
| absolute(int row) | 把ResultSet光标移动到参数指定的行数。 |
| relative(int rows) | rows为正数表示把ResultSet光标向下移动rows行,rows为负数表示把ResultSet光标向上移动(-rows)行。 |
获取结果集光标位置
对于可滚动的结果集,可调用定位方法来改变光标的位置。JDBC驱动程序提供了获取光标所在行的方法,如表3所示。
获取结果集数据
ResultSet对象提供了丰富的方法,以获取结果集中的数据。获取数据的常用方法如表4所示,其他方法请参见JDK官方文档。
示例步骤
执行查询语句后,对返回的结果集进行处理。
- 使用while循环和next()方法逐行遍历结果集。
while (rs.next()) { // 使用列索引获取值 int c_customer_sk = rs.getInt(1); // 获取第一列的int型数据 String c_customer_name = rs.getString(2); // 获取第二列的String型数据 System.out.println("c_customer_sk: " + c_customer_sk + ", c_customer_name: " + c_customer_name); } - 调用close()方法关闭资源。
1 2
rs.close(); // 关闭ResultSet对象 stmts.close(); // 关闭Statement对象