java.sql public interface ResultSet
extends Wrapper, AutoCloseable
表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。
ResultSet对象维护一个指向其当前数据行的游标。 最初光标位于第一行之前。 next方法将光标移动到下一行,因为当ResultSet对象中没有更多行时它返回false ,所以可以在while循环中使用它来遍历结果集。
默认的ResultSet对象是不可更新的,并且有一个只能向前移动的游标。 因此,您只能遍历它一次,并且只能从第一行到最后一行。 可以生成可滚动和/或可更新的ResultSet对象。 下面的代码片段,其中con是一个有效的Connection对象,说明了如何制作一个可滚动的、对其他人的更新不敏感且可更新的结果集。 见ResultSet字段的其他选项。

Statement stmt = con.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");
// rs will be scrollable, will not show changes made by others,
// and will be updatable





ResultSet接口提供了用于从当前行检索列值的getter方法( getBoolean 、 getLong等)。 可以使用列的索引号或列名来检索值。 一般来说,使用列索引会更有效率。 列从 1 开始编号。为了获得最大的可移植性,应按从左到右的顺序读取每行中的结果集列,并且每列应仅读取一次。
对于 getter 方法,JDBC 驱动程序尝试将底层数据转换为 getter 方法中指定的 Java 类型并返回合适的 Java 值。 JDBC 规范有一个表,显示了从 SQL 类型到可由ResultSet getter 方法使用的 Java 类型的允许映射。
用作 getter 方法输入的列名不区分大小写。 当使用列名调用 getter 方法并且多个列具有相同名称时,将返回第一个匹配列的值。 列名选项旨在在生成结果集的 SQL 查询中使用列名时使用。 对于查询中未明确命名的列,最好使用列号。 如果使用列名,程序员应该注意确保它们唯一地引用预期的列,这可以通过 SQL AS子句来保证。
JDBC 2.0 API(Java™ 2 SDK,标准版,1.2 版)中的此接口添加了一组更新程序方法。 有关 getter 方法参数的注释也适用于 updater 方法的参数。
更新程序方法可以通过两种方式使用:
更新当前行中的列值。 在可滚动的ResultSet对象中,光标可以前后移动、移动到绝对位置或相对于当前行的位置。 以下代码片段更新ResultSet对象rs第五行中的NAME列,然后使用方法updateRow更新从中派生rs的数据源表。

rs.absolute(5); // moves the cursor to the fifth row of rs
rs.updateString("NAME", "AINSWORTH"); // updates the
// NAME column of row 5 to be AINSWORTH
rs.updateRow(); // updates the row in the data source





将列值插入插入行。 可更新的ResultSet对象有一个与之关联的特殊行,用作构建要插入的行的暂存区。 以下代码片段将光标移动到插入行,构建一个三列行,然后使用insertRow方法将其插入到rs和数据源表中。

rs.moveToInsertRow(); // moves cursor to the insert row
rs.updateString(1, "AINSWORTH"); // updates the
// first column of the insert row to be AINSWORTH
rs.updateInt(2,35); // updates the second column to be 35
rs.updateBoolean(3, true); // updates the third column to true
rs.insertRow();
rs.moveToCurrentRow();





当生成它的Statement对象关闭、重新执行或用于从多个结果序列中检索下一个结果时, ResultSet对象将自动关闭。
ResultSet对象的列的数量、类型和属性由ResultSet.getMetaData方法返回的ResultSetMetaData对象提供。
另见:
Statement.executeQuery , Statement.getResultSet , ResultSetMetaData
< 1.8 >