A ResultSet object maintains a cursor pointing
to its current row of data. Initially the cursor is positioned
before the first row. The next method moves the
cursor to the next row, and because it returns false
when there are no more rows in the ResultSet object,
it can be used in a while loop to iterate through
the result set.
A default ResultSet object is not updatable and
has a cursor that moves forward only. Thus, you can
iterate through it only once and only from the first row to the
last row. It is possible to
produce ResultSet objects that are scrollable and/or
updatable. The following code fragment, in which con
is a valid Connection object, illustrates how to make
a result set that is scrollable and insensitive to updates by others, and
that is updatable. See ResultSet fields for other
options.
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
The ResultSet interface provides
getter methods (getBoolean, getLong, and so on)
for retrieving column values from the current row.
Values can be retrieved using either the index number of the
column or the name of the column. In general, using the
column index will be more efficient. Columns are numbered from 1.
For maximum portability, result set columns within each row should be
read in left-to-right order, and each column should be read only once.
For the getter methods, a JDBC driver attempts
to convert the underlying data to the Java type specified in the
getter method and returns a suitable Java value. The JDBC specification
has a table showing the allowable mappings from SQL types to Java types
that can be used by the ResultSet getter methods.
Column names used as input to getter methods are case insensitive. When a getter method is called with a column name and several columns have the same name, the value of the first matching column will be returned. The column name option is designed to be used when column names are used in the SQL query that generated the result set. For columns that are NOT explicitly named in the query, it is best to use column numbers. If column names are used, there is no way for the programmer to guarantee that they actually refer to the intended columns.
A set of updater methods were added to this interface in the JDBC 2.0 API (JDK 1.2). The comments regarding parameters to the getter methods also apply to parameters to the updater methods.
The updater methods may be used in two ways:
ResultSet object, the cursor can be moved backwards
and forwards, to an absolute position, or to a position
relative to the current row.
The following code fragment updates the NAME column
in the fifth row of the ResultSet object
rs and then uses the method updateRow
to update the data source table from which rs was derived.
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 object has a special row associated with
it that serves as a staging area for building a row to be inserted.
The following code fragment moves the cursor to the insert row, builds
a three-column row, and inserts it into rs and into
the data source table using the method insertRow.
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();
A ResultSet object is automatically closed when the
Statement object that
generated it is closed, re-executed, or used
to retrieve the next result from a sequence of multiple results.
The number, types and properties of a ResultSet
object's columns are provided by the ResulSetMetaData
object returned by the ResultSet.getMetaData method.
ResultSet objects should be
closed when the method Connection.commit is called.ResultSet object that may NOT be updated.ResultSet object that may be updated.setFetchDirection
as a hint to the driver, which the driver may ignore.setFetchDirection
as a hint to the driver, which the driver may ignore.setFetchDirection
as a hint to the driver, which the driver may ignore.ResultSet objects should not
be closed when the method Connection.commit is called.ResultSet object
whose cursor may move only forward.ResultSet object
that is scrollable but generally not sensitive to changes made by others.ResultSet object
that is scrollable and generally sensitive to changes made by others.ResultSet object.
If the row number is positive, the cursor moves to the given row number with respect to the beginning of the result set. The first row is row 1, the second is row 2, and so on.
If the given row number is negative, the cursor moves to
an absolute row position with respect to
the end of the result set. For example, calling the method
absolute(-1) positions the
cursor on the last row; calling the method absolute(-2)
moves the cursor to the next-to-last row, and so on.
An attempt to position the cursor beyond the first/last row in the result set leaves the cursor before the first row or after the last row.
Note: Calling absolute(1) is the same
as calling first(). Calling absolute(-1)
is the same as calling last().
ResultSet object, just after the
last row. This method has no effect if the result set contains no rows.ResultSet object, just before the
first row. This method has no effect if the result set contains no rows.ResultSet object.
This method may be called after calling an
updater method(s) and before calling
the method updateRow to roll back
the updates made to a row. If no updates have been made or
updateRow has already been called, this method has no
effect.ResultSet object.
After this method is called, the method getWarnings
returns null until a new warning is
reported for this ResultSet object.ResultSet object's database and
JDBC resources immediately instead of waiting for
this to happen when it is automatically closed.
Note: A ResultSet object
is automatically closed by the
Statement object that generated it when
that Statement object is closed,
re-executed, or is used to retrieve the next result from a
sequence of multiple results. A ResultSet object
is also automatically closed when it is garbage collected.
ResultSet object
and from the underlying database. This method cannot be called when
the cursor is on the insert row.ResultSet column name to its
ResultSet column index.ResultSet object.ResultSet object as an Array object
in the Java programming language.ResultSet object as an Array object
in the Java programming language.ResultSet object as
a stream of ASCII characters. The value can then be read in chunks from the
stream. This method is particularly
suitable for retrieving large Note: All the data in the returned stream must be
read prior to getting the value of any other column. The next
call to a getter method implicitly closes the stream. Also, a
stream may return 0 when the method
InputStream.available
is called whether there is data available or not.
ResultSet object as a stream of
ASCII characters. The value can then be read in chunks from the
stream. This method is particularly
suitable for retrieving large LONGVARCHAR values.
The JDBC driver will
do any necessary conversion from the database format into ASCII.
Note: All the data in the returned stream must be
read prior to getting the value of any other column. The next
call to a getter method implicitly closes the stream. Also, a
stream may return 0 when the method available
is called whether there is data available or not.
ResultSet object as a
java.math.BigDecimal with full precision.ResultSet object as
a java.sql.BigDecimal in the Java programming language.ResultSet object as a
java.math.BigDecimal with full precision.ResultSet object as
a java.math.BigDecimal in the Java programming language.ResultSet object as a binary stream of
uninterpreted bytes. The value can then be read in chunks from the
stream. This method is particularly
suitable for retrieving large LONGVARBINARY values.
Note: All the data in the returned stream must be
read prior to getting the value of any other column. The next
call to a getter method implicitly closes the stream. Also, a
stream may return 0 when the method
InputStream.available
is called whether there is data available or not.
ResultSet object as a stream of uninterpreted
bytes.
The value can then be read in chunks from the
stream. This method is particularly
suitable for retrieving large LONGVARBINARY
values.
Note: All the data in the returned stream must be
read prior to getting the value of any other column. The next
call to a getter method implicitly closes the stream. Also, a
stream may return 0 when the method available
is called whether there is data available or not.
ResultSet object as a Blob object
in the Java programming language.ResultSet object as a Blob object
in the Java programming language.ResultSet object as
a boolean in the Java programming language.ResultSet object as
a boolean in the Java programming language.ResultSet object as
a byte in the Java programming language.ResultSet object as
a byte in the Java programming language.ResultSet object as
a byte array in the Java programming language.
The bytes represent the raw values returned by the driver.ResultSet object as
a byte array in the Java programming language.
The bytes represent the raw values returned by the driver.ResultSet object as a
java.io.Reader object.ResultSet object as a
java.io.Reader object.ResultSet object as a Clob object
in the Java programming language.ResultSet object as a Clob object
in the Java programming language.ResultSet object.
The concurrency used is determined by the
Statement object that created the result set.ResultSet
object.
In SQL, a result table is retrieved through a cursor that is
named. The current row of a result set can be updated or deleted
using a positioned update/delete statement that references the
cursor name. To insure that the cursor has the proper isolation
level to support update, the cursor's SELECT statement
should be of the form SELECT FOR UPDATE. If
FOR UPDATE is omitted, the positioned updates may fail.
The JDBC API supports this SQL feature by providing the name of the
SQL cursor used by a ResultSet object.
The current row of a ResultSet object
is also the current row of this SQL cursor.
Note: If positioned update is not supported, a
SQLException is thrown.
ResultSet object as
a java.sql.Date object in the Java programming language.ResultSet object as a java.sql.Date object
in the Java programming language.
This method uses the given calendar to construct an appropriate millisecond
value for the date if the underlying database does not store
timezone information.ResultSet object as
a java.sql.Date object in the Java programming language.ResultSet object as a java.sql.Date object
in the Java programming language.
This method uses the given calendar to construct an appropriate millisecond
value for the date if the underlying database does not store
timezone information.ResultSet object as
a double in the Java programming language.ResultSet object as
a double in the Java programming language.ResultSet object.ResultSet object.ResultSet object as
a float in the Java programming language.ResultSet object as
a float in the Java programming language.ResultSet object as
an int in the Java programming language.ResultSet object as
an int in the Java programming language.ResultSet object as
a long in the Java programming language.ResultSet object as
a long in the Java programming language.ResultSet object's columns.Gets the value of the designated column in the current row
of this ResultSet object as
an Object in the Java programming language.
This method will return the value of the given column as a
Java object. The type of the Java object will be the default
Java object type corresponding to the column's SQL type,
following the mapping for built-in types specified in the JDBC
specification. If the value is an SQL NULL,
the driver returns a Java null.
This method may also be used to read database-specific
abstract data types.
In the JDBC 2.0 API, the behavior of method
getObject is extended to materialize
data of SQL user-defined types. When a column contains
a structured or distinct value, the behavior of this method is as
if it were a call to: getObject(columnIndex,
this.getStatement().getConnection().getTypeMap()).
ResultSet object as an Object
in the Java programming language.
If the value is an SQL NULL,
the driver returns a Java null.
This method uses the given Map object
for the custom mapping of the
SQL structured or distinct type that is being retrieved.Gets the value of the designated column in the current row
of this ResultSet object as
an Object in the Java programming language.
This method will return the value of the given column as a
Java object. The type of the Java object will be the default
Java object type corresponding to the column's SQL type,
following the mapping for built-in types specified in the JDBC
specification. If the value is an SQL NULL,
the driver returns a Java null.
This method may also be used to read database-specific abstract data types.
In the JDBC 2.0 API, the behavior of the method
getObject is extended to materialize
data of SQL user-defined types. When a column contains
a structured or distinct value, the behavior of this method is as
if it were a call to: getObject(columnIndex,
this.getStatement().getConnection().getTypeMap()).
ResultSet object as an Object
in the Java programming language.
If the value is an SQL NULL,
the driver returns a Java null.
This method uses the specified Map object for
custom mapping if appropriate.ResultSet object as a Ref object
in the Java programming language.ResultSet object as a Ref object
in the Java programming language.ResultSet object as
a short in the Java programming language.ResultSet object as
a short in the Java programming language.Statement object that produced this
ResultSet object.
If the result set was generated some other way, such as by a
DatabaseMetaData method, this method returns
null.ResultSet object as
a String in the Java programming language.ResultSet object as
a String in the Java programming language.ResultSet object as
a java.sql.Time object in the Java programming language.ResultSet object as a java.sql.Time object
in the Java programming language.
This method uses the given calendar to construct an appropriate millisecond
value for the time if the underlying database does not store
timezone information.ResultSet object as
a java.sql.Time object in the Java programming language.ResultSet object as a java.sql.Time object
in the Java programming language.
This method uses the given calendar to construct an appropriate millisecond
value for the time if the underlying database does not store
timezone information.ResultSet object as
a java.sql.Timestamp object in the Java programming language.ResultSet object as a java.sql.Timestamp object
in the Java programming language.
This method uses the given calendar to construct an appropriate millisecond
value for the timestamp if the underlying database does not store
timezone information.ResultSet object as
a java.sql.Timestamp object.ResultSet object as a java.sql.Timestamp object
in the Java programming language.
This method uses the given calendar to construct an appropriate millisecond
value for the timestamp if the underlying database does not store
timezone information.ResultSet object.
The type is determined by the Statement object
that created the result set.ResultSet object as
as a stream of two-byte Unicode characters. The first byte is
the high byte; the second byte is the low byte.
The value can then be read in chunks from the
stream. This method is particularly
suitable for retrieving large LONGVARCHARvalues. The
JDBC driver will do any necessary conversion from the database
format into Unicode.
Note: All the data in the returned stream must be
read prior to getting the value of any other column. The next
call to a getter method implicitly closes the stream.
Also, a stream may return 0 when the method
InputStream.available
is called, whether there is data available or not.
ResultSet object as a stream of two-byte
Unicode characters. The first byte is the high byte; the second
byte is the low byte.
The value can then be read in chunks from the
stream. This method is particularly
suitable for retrieving large LONGVARCHAR values.
The JDBC technology-enabled driver will
do any necessary conversion from the database format into Unicode.
Note: All the data in the returned stream must be
read prior to getting the value of any other column. The next
call to a getter method implicitly closes the stream.
Also, a stream may return 0 when the method
InputStream.available is called, whether there
is data available or not.
ResultSet object as a java.net.URL
object in the Java programming language.ResultSet object as a java.net.URL
object in the Java programming language.ResultSet object.
Subsequent warnings on this ResultSet object
will be chained to the SQLWarning object that
this method returns.
The warning chain is automatically cleared each time a new
row is read. This method may not be called on a ResultSet
object that has been closed; doing so will cause an
SQLException to be thrown.
Note: This warning chain only covers warnings caused
by ResultSet methods. Any warning caused by
Statement methods
(such as reading OUT parameters) will be chained on the
Statement object.
ResultSet object and into the database.
The cursor must be on the insert row when this method is called.ResultSet object.ResultSet object.ResultSet object.ResultSet object.
Note: Calling the method isLast may be expensive
because the JDBC driver
might need to fetch ahead one row in order to determine
whether the current row is the last row in the result set.ResultSet object.insertRow methods may be
called when the cursor is on the insert row. All of the columns in
a result set must be given a value each time this method is
called before calling insertRow.
An updater method must be called before a
getter method can be called on a column value.ResultSet cursor is initially positioned
before the first row; the first call to the method
next makes the first row the current row; the
second call makes the second row the current row, and so on.
If an input stream is open for the current row, a call
to the method next will
implicitly close it. A ResultSet object's
warning chain is cleared when a new row is read.
ResultSet object.The refreshRow method provides a way for an
application to
explicitly tell the JDBC driver to refetch a row(s) from the
database. An application may want to call refreshRow when
caching or prefetching is being done by the JDBC driver to
fetch the latest value of a row from the database. The JDBC driver
may actually refresh multiple rows at once if the fetch size is
greater than one.
All values are refetched subject to the transaction isolation
level and cursor sensitivity. If refreshRow is called after
calling an updater method, but before calling
the method updateRow, then the
updates made to the row are lost. Calling the method
refreshRow frequently will likely slow performance.
relative(0) is valid, but does
not change the cursor position.
Note: Calling the method relative(1)
is identical to calling the method next() and
calling the method relative(-1) is identical
to calling the method previous().
ResultSet object can detect deletions.ResultSet object can detect visible inserts.ResultSet object will be processed.
The initial value is determined by the
Statement object
that produced this ResultSet object.
The fetch direction may be changed at any time.ResultSet object.
If the fetch size specified is zero, the JDBC driver
ignores the value and is free to make its own best guess as to what
the fetch size should be. The default value is set by the
Statement object
that created the result set. The fetch size may be changed at any time.java.sql.Array value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.java.sql.Array value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.updateRow or
insertRow methods are called to update the database.updateRow or
insertRow methods are called to update the database.java.math.BigDecimal
value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.java.sql.BigDecimal
value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.updateRow or
insertRow methods are called to update the database.updateRow or
insertRow methods are called to update the database.java.sql.Blob value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.java.sql.Blob value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.boolean value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.boolean value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.byte value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.byte value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.byte array value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.updateRow
or insertRow methods are called to update the database.updateRow or
insertRow methods are called to update the database.updateRow or
insertRow methods are called to update the database.java.sql.Clob value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.java.sql.Clob value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.java.sql.Date value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.java.sql.Date value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.double value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.double value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.float value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.float value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.int value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.int value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.long value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.long value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.updateRow
or insertRow methods are called to update the database.null value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.Object value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.Object value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.Object value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.Object value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.java.sql.Ref value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.java.sql.Ref value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.ResultSet object.
This method cannot be called when the cursor is on the insert row.short value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.short value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.String value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.String value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.java.sql.Time value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.java.sql.Time value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.java.sql.Timestamp
value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.java.sql.Timestamp
value.
The updater methods are used to update column values in the
current row or the insert row. The updater methods do not
update the underlying database; instead the updateRow or
insertRow methods are called to update the database.NULL.
Note that you must first call one of the getter methods
on a column to try to read its value and then call
the method wasNull to see if the value read was
SQL NULL.