接口 ResultSet
public interface ResultSet
表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。
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
接口提供用于从当前行检索列值的
获取方法(
getBoolean
、
getLong
等)。可以使用列的索引编号或列的名称检索值。一般情况下,使用列索引较为高效。列从 1 开始编号。为了获得最大的可移植性,应该按从左到右的顺序读取每行中的结果集列,而且每列只能读取一次。
对于获取方法,JDBC 驱动程序尝试将基础数据转换为在获取方法中指定的 Java 类型,并返回适当的 Java 值。JDBC 规范有一个表,显示允许的从 SQL 类型到供 ResultSet
获取方法使用的 Java 类型的映射关系。
用作获取方法的输入的列名称不区分大小写。用列名称调用获取方法时,如果多个列具有这一名称,则返回第一个匹配列的值。列名称选项在生成结果集的 SQL 查询中使用列名称时使用。对于没有在查询中显式命名的列,最好使用列编号。如果使用列名称,程序员无法保证名称实际所指的就是预期的列。
在 JDBC 2.0 API (JDK 1.2) 中,此接口添加了一组更新方法。关于获取方法参数的注释同样适用于更新方法的参数。
可以用以下两种方式使用更新方法:
- 更新当前行中的列值。在可滚动的
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 beAINSWORTH
rs.updateRow(); // updates the row in the data source - 将列值插入到插入行中。可更新的
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 be35
rs.updateBoolean(3, true); // updates the third column totrue
rs.insertRow(); rs.moveToCurrentRow();
当生成 ResultSet
对象的 Statement
对象关闭、重新执行或用来从多个结果的序列检索下一个结果时,ResultSet
对象会自动关闭。
ResultSet
对象的列的编号、类型和属性由 ResultSet.getMetaData
方法返回的 ResulSetMetaData
对象提供。
字段摘要 | |
---|---|
static int |
CLOSE_CURSORS_AT_COMMIT 该常量指示调用 Connection.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 该常量指示调用 Connection.commit 方法时不应关闭 ResultSet 对象。 |
static int |
TYPE_FORWARD_ONLY 该常量指示指针只能向前移动的 ResultSet 对象的类型。 |
static int |
TYPE_SCROLL_INSENSITIVE 该常量指示可滚动但通常不受其他的更改影响的 ResultSet 对象的类型。 |
static int |
TYPE_SCROLL_SENSITIVE 该常量指示可滚动并且通常受其他的更改影响的 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 columnName) 将给定的 ResultSet 列名称映射到其 ResultSet 列索引。 |
boolean |
first() 将指针移动到此 ResultSet 对象的第一行。 |
Array |
getArray(int i) 以 Java 编程语言中 Array 对象的形式检索此 ResultSet 对象的当前行中指定列的值。 |
Array |
getArray(String colName) 以 Java 编程语言中 Array 对象的形式检索此 ResultSet 对象的当前行中指定列的值。 |
InputStream |
getAsciiStream(int columnIndex) 以 ASCII 字符流的形式检索此 ResultSet 对象的当前行中指定列的值。 |
InputStream |
getAsciiStream(String columnName) 以 ASCII 字符流的形式检索此 ResultSet 对象的当前行中指定列的值。 |
BigDecimal |
getBigDecimal(int columnIndex) 以具有全精度的 java.math.BigDecimal 的形式检索此 ResultSet 对象的当前行中指定列的值。 |
BigDecimal |
getBigDecimal(int columnIndex, int scale) 已过时。 |
BigDecimal |
getBigDecimal(String columnName) 以具有全精度的 java.math.BigDecimal 的形式检索此 ResultSet 对象的当前行中指定列的值。 |
BigDecimal |
getBigDecimal(String columnName, int scale) 已过时。 |
InputStream |
getBinaryStream(int columnIndex) 以未解释字节的二进制流的形式检索此 ResultSet 对象的当前行中指定列的值。 |
InputStream |
getBinaryStream(String columnName) 以未解释的 byte 流的形式检索此 ResultSet 对象的当前行中指定列的值。 |
Blob |
getBlob(int i) 以 Java 编程语言中 Blob 对象的形式检索此 ResultSet 对象的当前行中指定列的值。 |
Blob |
getBlob(String colName) 以 Java 编程语言中 Blob 对象的形式检索此 ResultSet 对象的当前行中指定列的值。 |
boolean |
getBoolean(int columnIndex) 以 Java 编程语言中 boolean 的形式检索此 ResultSet 对象的当前行中指定列的值。 |
boolean |
getBoolean(String columnName) 以 Java 编程语言中 boolean 的形式检索此 ResultSet 对象的当前行中指定列的值。 |
byte |
getByte(int columnIndex) 以 Java 编程语言中 byte 的形式检索此 ResultSet 对象的当前行中指定列的值。 |
byte |
getByte(String columnName) 以 Java 编程语言中 byte 的形式检索此 ResultSet 对象的当前行中指定列的值。 |
byte[] |
getBytes(int columnIndex) 以 Java 编程语言中 byte 数组的形式检索此 ResultSet 对象的当前行中指定列的值。 |
byte[] |
getBytes(String columnName) 以 Java 编程语言中 byte 数组的形式检索此 ResultSet 对象的当前行中指定列的值。 |
Reader |
getCharacterStream(int columnIndex) 以 java.io.Reader 对象的形式检索此 ResultSet 对象的当前行中指定列的值。 |
Reader |
getCharacterStream(String columnName) 以 java.io.Reader 对象的形式检索此 ResultSet 对象的当前行中指定列的值。 |
Clob |
getClob(int i) 以 Java 编程语言中 Clob 对象的形式检索此 ResultSet 对象的当前行中指定列的值。 |
Clob |
getClob(String colName) 以 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 columnName) 以 Java 编程语言中的 java.sql.Date 对象的形式检索此 ResultSet 对象的当前行中指定列的值。 |
Date |
getDate(String columnName, Calendar cal) 以 Java 编程语言中 java.sql.Date 对象的形式检索此 ResultSet 对象的当前行中指定列的值。 |
double |
getDouble(int columnIndex) 以 Java 编程语言中 double 的形式检索此 ResultSet 对象的当前行中指定列的值。 |
double |
getDouble(String columnName) 以 Java 编程语言中 double 的形式检索此 ResultSet 对象的当前行中指定列的值。 |
int |
getFetchDirection() 检索此 ResultSet 对象的获取方向。 |
int |
getFetchSize() 检索此 ResultSet 对象的获取大小。 |
float |
getFloat(int columnIndex) 以 Java 编程语言中 float 的形式检索此 ResultSet 对象的当前行中指定列的值。 |
float |
getFloat(String columnName) 以 Java 编程语言中 float 的形式检索此 ResultSet 对象的当前行中指定列的值。 |
int |
getInt(int columnIndex) 以 Java 编程语言中 int 的形式检索此 ResultSet 对象的当前行中指定列的值。 |
int |
getInt(String columnName) 以 Java 编程语言中 int 的形式检索此 ResultSet 对象的当前行中指定列的值。 |
long |
getLong(int columnIndex) 以 Java 编程语言中 long 的形式检索此 ResultSet 对象的当前行中指定列的值。 |
long |
getLong(String columnName) 以 Java 编程语言中 long 的形式检索此 ResultSet 对象的当前行中指定列的值。 |
ResultSetMetaData |
getMetaData() 检索此 ResultSet 对象的列的编号、类型和属性。 |
Object |
getObject(int columnIndex) 以 Java 编程语言中 Object 的形式获取此 ResultSet 对象的当前行中指定列的值。 |
Object |
getObject(int i, Map<String,Class<?>> map) 以 Java 编程语言中 Object 的形式检索此 ResultSet 对象的当前行中指定列的值。 |
Object |
getObject(String columnName) 以 Java 编程语言中 Object 的形式获取此 ResultSet 对象的当前行中指定列的值。 |
Object |
getObject(String colName, Map<String,Class<?>> map) 以 Java 编程语言中 Object 的形式检索此 ResultSet 对象的当前行中指定列的值。 |
Ref |
getRef(int i) 以 Java 编程语言中 Ref 对象的形式检索此 ResultSet 对象的当前行中指定列的值。 |
Ref |
getRef(String colName) 以 Java 编程语言中 Ref 对象的形式检索此 ResultSet 对象的当前行中指定列的值。 |
int |
getRow() 检索当前行编号。 |
short |
getShort(int columnIndex) 以 Java 编程语言中 short 的形式检索此 ResultSet 对象的当前行中指定列的值。 |
short |
getShort(String columnName) 以 Java 编程语言中 short 的形式检索此 ResultSet 对象的当前行中指定列的值。 |
Statement |
getStatement() 检索生成此 ResultSet 对象的 Statement 对象。 |
String |
getString(int columnIndex) 以 Java 编程语言中 String 的形式检索此 ResultSet 对象的当前行中指定列的值。 |
String |
getString(String columnName) 以 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 columnName) 以 Java 编程语言中 java.sql.Time 对象的形式检索此 ResultSet 对象的当前行中指定列的值。 |
Time |
getTime(String columnName, 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 columnName) 以 java.sql.Timestamp 对象的形式检索此 ResultSet 对象的当前行中指定列的值。 |
Timestamp |
getTimestamp(String columnName, Calendar cal) 以 Java 编程语言中 java.sql.Timestamp 对象的形式检索此 ResultSet 对象的当前行中指定列的值。 |
int |
getType() 检索此 ResultSet 对象的类型。 |
InputStream |
getUnicodeStream(int columnIndex) 已过时。 使用 getCharacterStream 取代 getUnicodeStream |
InputStream |
getUnicodeStream(String columnName) 已过时。 使用 getCharacterStream 代替 |
URL |
getURL(int columnIndex) 以 Java 编程语言中 java.net.URL 对象的形式检索此 ResultSet 对象的当前行中指定列的值。 |
URL |
getURL(String columnName) 以 Java 编程语言中 java.net.URL 对象的形式检索此 ResultSet 对象的当前行中指定列的值。 |
SQLWarning |
getWarnings() 检索此 ResultSet 对象上的调用报告的第一个警告。 |
void |
insertRow() 将插入行的内容插入到此 ResultSet 对象和数据库中。 |
boolean |
isAfterLast() 检索指针是否位于此 ResultSet 对象的最后一行之后。 |
boolean |
isBeforeFirst() 检索指针是否位于此 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() 检索是否已更新当前行。 |
void |
setFetchDirection(int direction) 设置此 ResultSet 对象中行的处理方向。 |
void |
setFetchSize(int rows) 为 JDBC 驱动程序设置此 ResultSet 对象需要更多行 |