java.sql

接口
异常
所有超级接口:
Wrapper
所有已知子接口:
CachedRowSet, FilteredRowSet, JdbcRowSet, JoinRowSet, RowSet, SyncResolver, WebRowSet

public interface ResultSet
     
extends Wrapper

表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。

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 接口提供用于从当前行获取列值的 获取 方法( getBooleangetLong 等)。可以使用列的索引编号或列的名称获取值。一般情况下,使用列索引较为高效。列从 1 开始编号。为了获得最大的可移植性,应该按从左到右的顺序读取每行中的结果集列,每列只能读取一次。

对于获取方法,JDBC 驱动程序尝试将底层数据转换为在获取方法中指定的 Java 类型,并返回适当的 Java 值。JDBC 规范有一个表,显示允许的从 SQL 类型到 ResultSet 获取方法所使用的 Java 类型的映射关系。

用作获取方法的输入的列名称不区分大小写。用列名称调用获取方法时,如果多个列具有这一名称,则返回第一个匹配列的值。在生成结果集的 SQL 查询中使用列名称时,将使用列名称选项。对于没有在查询中显式指定的列,最好使用列编号。如果使用列名称,则程序员应该注意保证名称唯一引用预期的列,这可以使用 SQL AS 子句确定。

在 JDBC 2.0 API(JavaTM 2 SDK 标准版 1.2 版)中,此接口添加了一组更新方法。关于获取方法参数的注释同样适用于更新方法的参数。

可以用以下两种方式使用更新方法:

  1. 更新当前行中的列值。在可滚动的 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
    
     
  2. 将列值插入到插入行中。可更新的 ResultSet 对象具有一个与其关联的特殊行,该行用作构建要插入的行的暂存区域 (staging area)。以下代码片段将光标移动到插入行,构建一个三列的行,并使用方法 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();
    
     

当生成 ResultSet 对象的 Statement 对象关闭、重新执行或用来从多个结果的序列获取下一个结果时,ResultSet 对象将自动关闭。

ResultSet 对象的列的编号、类型和属性由 ResultSet.getMetaData 方法返回的 ResulSetMetaData 对象提供。

另请参见:
Statement.executeQuery(java.lang.String), Statement.getResultSet(), ResultSetMetaData

字段摘要
static int CLOSE_CURSORS_AT_COMMIT
          该常量指示提交当前事务时,具有此可保存性的打开的 ResultSet 对象将被关闭。
static int CONCUR_READ_ONLY
          该常量指示不可以更新的 ResultSet 对象的并发模式。
static int CONCUR_UPDATABLE
          该常量指示可以更新的 ResultSet 对象的并发模式。
static int FETCH_FORWARD
          该常量指示将按正向(即从第一个到最后一个)处理结果集中的行。
static int FETCH_REVERSE
          该常量指示将按逆向(即从最后一个到第一个)处理结果集中的行处理。
static int FETCH_UNKNOWN
          该常量指示结果集中的行的处理顺序未知。
static int HOLD_CURSORS_OVER_COMMIT
          该常量指示提交当前事务时,具有此可保存性的打开的 ResultSet 对象将保持开放。
static int TYPE_FORWARD_ONLY
          该常量指示光标只能向前移动的 ResultSet 对象的类型。
static int TYPE_SCROLL_INSENSITIVE
          该常量指示可滚动但通常不受 ResultSet 底层数据更改影响的 ResultSet 对象的类型。
static int TYPE_SCROLL_SENSITIVE
          该常量指示可滚动并且通常受 ResultSet 底层数据更改影响的 ResultSet 对象的类型。
 
方法摘要
 boolean absolute(int row)
          将光标移动到此 ResultSet 对象的给定行编号。
 void afterLast()
          将光标移动到此 ResultSet 对象的末尾,正好位于最后一行之后。
 void beforeFirst()
          将光标移动到此 ResultSet 对象的开头,正好位于第一行之前。
 void cancelRowUpdates()
          取消对 ResultSet 对象中的当前行所作的更新。
 void clearWarnings()
          清除在此 ResultSet 对象上报告的所有警告。
 void close()
          立即释放此 ResultSet 对象的数据库和 JDBC 资源,而不是等待该对象自动关闭时发生此操作。
 void deleteRow()
          从此 ResultSet 对象和底层数据库中删除当前行。
 int findColumn(String columnLabel)
          将给定的 ResultSet 列标签映射到其 ResultSet 列索引。
 boolean first()
          将光标移动到此 ResultSet 对象的第一行。
 Array getArray(int columnIndex)
          以 Java 编程语言中 Array 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Array getArray(String columnLabel)
          以 Java 编程语言中 Array 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 InputStream getAsciiStream(int columnIndex)
          以 ASCII 字符流的形式获取此 ResultSet 对象的当前行中指定列的值。
 InputStream getAsciiStream(String columnLabel)
          以 ASCII 字符流的形式获取此 ResultSet 对象的当前行中指定列的值。
 BigDecimal getBigDecimal(int columnIndex)
          以具有全精度的 java.math.BigDecimal 的形式获取此 ResultSet 对象的当前行中指定列的值。
 BigDecimal getBigDecimal(int columnIndex, int scale)
          已过时。  
 BigDecimal getBigDecimal(String columnLabel)
          以具有全精度的 java.math.BigDecimal 的形式获取此 ResultSet 对象的当前行中指定列的值。
 BigDecimal getBigDecimal(String columnLabel, int scale)
          已过时。  
 InputStream getBinaryStream(int columnIndex)
          以未解释字节的流的形式获取此 ResultSet 对象的当前行中指定列的值。
 InputStream getBinaryStream(String columnLabel)
          以未解释的 byte 流的形式获取此 ResultSet 对象的当前行中指定列的值。
 Blob getBlob(int columnIndex)
          以 Java 编程语言中 Blob 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Blob getBlob(String columnLabel)
          以 Java 编程语言中 Blob 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 boolean getBoolean(int columnIndex)
          以 Java 编程语言中 boolean 的形式获取此 ResultSet 对象的当前行中指定列的值。
 boolean getBoolean(String columnLabel)
          以 Java 编程语言中 boolean 的形式获取此 ResultSet 对象的当前行中指定列的值。
 byte getByte(int columnIndex)
          以 Java 编程语言中 byte 的形式获取此 ResultSet 对象的当前行中指定列的值。
 byte getByte(String columnLabel)
          以 Java 编程语言中 byte 的形式获取此 ResultSet 对象的当前行中指定列的值。
 byte[] getBytes(int columnIndex)
          以 Java 编程语言中 byte 数组的形式获取此 ResultSet 对象的当前行中指定列的值。
 byte[] getBytes(String columnLabel)
          以 Java 编程语言中 byte 数组的形式获取此 ResultSet 对象的当前行中指定列的值。
 Reader getCharacterStream(int columnIndex)
          以 java.io.Reader 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Reader getCharacterStream(String columnLabel)
          以 java.io.Reader 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Clob getClob(int columnIndex)
          以 Java 编程语言中 Clob 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Clob getClob(String columnLabel)
          以 Java 编程语言中 Clob 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 int getConcurrency()
          获取此 ResultSet 对象的并发模式。
 String getCursorName()
          获取此 ResultSet 对象使用的 SQL 光标的名称。
 Date getDate(int columnIndex)
          以 Java 编程语言中 java.sql.Date 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Date getDate(int columnIndex, Calendar cal)
          以 Java 编程语言中 java.sql.Date 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Date getDate(String columnLabel)
          以 Java 编程语言中的 java.sql.Date 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Date getDate(String columnLabel, Calendar cal)
          以 Java 编程语言中 java.sql.Date 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 double getDouble(int columnIndex)
          以 Java 编程语言中 double 的形式获取此 ResultSet 对象的当前行中指定列的值。
 double getDouble(String columnLabel)
          以 Java 编程语言中 double 的形式获取此 ResultSet 对象的当前行中指定列的值。
 int getFetchDirection()
          获取此 ResultSet 对象的获取方向。
 int getFetchSize()
          获取此 ResultSet 对象的获取大小。
 float getFloat(int columnIndex)
          以 Java 编程语言中 float 的形式获取此 ResultSet 对象的当前行中指定列的值。
 float getFloat(String columnLabel)
          以 Java 编程语言中 float 的形式获取此 ResultSet 对象的当前行中指定列的值。
 int getHoldability()
          获取此 ResultSet 对象的可保存性
 int getInt(int columnIndex)
          以 Java 编程语言中 int 的形式获取此 ResultSet 对象的当前行中指定列的值。
 int getInt(String columnLabel)
          以 Java 编程语言中 int 的形式获取此 ResultSet 对象的当前行中指定列的值。
 long getLong(int columnIndex)
          以 Java 编程语言中 long 的形式获取此 ResultSet 对象的当前行中指定列的值。
 long getLong(String columnLabel)
          以 Java 编程语言中 long 的形式获取此 ResultSet 对象的当前行中指定列的值。
 ResultSetMetaData getMetaData()
          获取此 ResultSet 对象的列的编号、类型和属性。
 Reader getNCharacterStream(int columnIndex)
          以 java.io.Reader 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Reader getNCharacterStream(String columnLabel)
          以 java.io.Reader 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 NClob getNClob(int columnIndex)
          以 Java 编程语言中 NClob 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 NClob getNClob(String columnLabel)
          以 Java 编程语言中 NClob 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 String getNString(int columnIndex)
          以 Java 编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列的值。
 String getNString(String columnLabel)
          以 Java 编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列的值。
 Object getObject(int columnIndex)
          以 Java 编程语言中 Object 的形式获取此 ResultSet 对象的当前行中指定列的值。
 Object getObject(int columnIndex, Map<String,Class<?>> map)
          以 Java 编程语言中 Object 的形式获取此 ResultSet 对象的当前行中指定列的值。
 Object getObject(String columnLabel)
          以 Java 编程语言中 Object 的形式获取此 ResultSet 对象的当前行中指定列的值。
 Object getObject(String columnLabel, Map<String,Class<?>> map)
          以 Java 编程语言中 Object 的形式获取此 ResultSet 对象的当前行中指定列的值。
 Ref getRef(int columnIndex)
          以 Java 编程语言中 Ref 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Ref getRef(String columnLabel)
          以 Java 编程语言中 Ref 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 int getRow()
          获取当前行编号。
 RowId getRowId(int columnIndex)
          以 Java 编程语言中 java.sql.RowId 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 RowId getRowId(String columnLabel)
          以 Java 编程语言中 java.sql.RowId 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 short getShort(int columnIndex)
          以 Java 编程语言中 short 的形式获取此 ResultSet 对象的当前行中指定列的值。
 short getShort(String columnLabel)
          以 Java 编程语言中 short 的形式获取此 ResultSet 对象的当前行中指定列的值。
 SQLXML getSQLXML(int columnIndex)
          以 Java 编程语言中 java.sql.SQLXML 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 SQLXML getSQLXML(String columnLabel)
          以 Java 编程语言中 java.sql.SQLXML 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Statement getStatement()
          获取生成此 ResultSet 对象的 Statement 对象。
 String getString(int columnIndex)
          以 Java 编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列的值。
 String getString(String columnLabel)
          以 Java 编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列的值。
 Time getTime(int columnIndex)
          以 Java 编程语言中 java.sql.Time 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Time getTime(int columnIndex, Calendar cal)
          以 Java 编程语言中 java.sql.Time 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Time getTime(String columnLabel)
          以 Java 编程语言中 java.sql.Time 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Time getTime(String columnLabel, Calendar cal)
          以 Java 编程语言中 java.sql.Time 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Timestamp getTimestamp(int columnIndex)
          以 Java 编程语言中 java.sql.Timestamp 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Timestamp getTimestamp(int columnIndex, Calendar cal)
          以 Java 编程语言中 java.sql.Timestamp 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Timestamp getTimestamp(String columnLabel)
          以 Java 编程语言中 java.sql.Timestamp 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Timestamp getTimestamp(String columnLabel, Calendar cal)
          以 Java 编程语言中 java.sql.Timestamp 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 int getType()
          获取此 ResultSet 对象的类型。
 InputStream getUnicodeStream(int columnIndex)
          已过时。 使用 getCharacterStream 取代 getUnicodeStream
 InputStream getUnicodeStream(String columnLabel)
          已过时。 使用 getCharacterStream 代替
 URL getURL(int columnIndex)
          以 Java 编程语言中 java.net.URL 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 URL getURL(String columnLabel)
          以 Java 编程语言中 java.net.URL 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 SQLWarning getWarnings()
          获取此 ResultSet 对象上的调用报告的第一个警告。
 void insertRow()
          将插入行的内容插入到此 ResultSet 对象和数据库中。
 boolean isAfterLast()
          获取光标是否位于此 ResultSet 对象的最后一行之后。
 boolean isBeforeFirst()
          获取光标是否位于此 ResultSet 对象的第一行之前。
 boolean isClosed()
          获取此 ResultSet 对象是否已关闭。
 boolean isFirst()
          获取光标是否位于此 ResultSet 对象的第一行。
 boolean isLast()
          获取光标是否位于此 ResultSet 对象的最后一行。
 boolean last()
          将光标移动到此 ResultSet 对象的最后一行。
 void moveToCurrentRow()
          将光标移动到记住的光标位置,通常为当前行。
 void moveToInsertRow()
          将光标移动到插入行。
 boolean next()
          将光标从当前位置向前移一行。
 boolean previous()
          将光标移动到此 ResultSet 对象的上一行。
 void refreshRow()
          用数据库中的最近值刷新当前行。
 boolean relative(int rows)
          按相对行数(或正或负)移动光标。
 boolean rowDeleted()
          获取是否已删除某行。
 boolean rowInserted()
          获取当前行是否已有插入。
 boolean rowUpdated()
          获取是否已更新当前行。

JDK 1.6 中文手册