当前位置: 首页 > 文档资料 > JDBC API 中文教程 >

结果集(Result Sets)

优质
小牛编辑
133浏览
2023-12-01

从数据库查询读取数据的SQL语句,返回结果集中的数据。 SELECT语句是从数据库中选择行并在结果集中查看行的标准方法。 java.sql.ResultSet接口表示数据库查询的结果集。

ResultSet对象维护一个指向结果集中当前行的游标。 术语“结果集”指的是ResultSet对象中包含的行和列数据。

ResultSet接口的方法可以分为三类 -

  • Navigational methods:用于移动光标。

  • Get methods:用于查看光标指向的当前行的列中的数据。

  • Update methods:用于更新当前行的列中的数据。 然后,也可以在底层数据库中更新更新。

光标可根据ResultSet的属性移动。 在创建生成ResultSet的相应Statement时,将指定这些属性。

JDBC提供了以下连接方法来创建具有所需ResultSet的语句 -

  • createStatement(int RSType, int RSConcurrency);

  • prepareStatement(String SQL, int RSType, int RSConcurrency);

  • prepareCall(String sql, int RSType, int RSConcurrency);

第一个参数表示ResultSet对象的类型,第二个参数是两个ResultSet常量之一,用于指定结果集是只读还是可更新。

ResultSet的类型

可能的RSType如下。 如果未指定任何ResultSet类型,则将自动获得TYPE_FORWARD_ONLY。

类型描述
ResultSet.TYPE_FORWARD_ONLY光标只能在结果集中向前移动。
ResultSet.TYPE_SCROLL_INSENSITIVE游标可以向前和向后滚动,结果集对创建结果集后其他人对数据库所做的更改不敏感。
ResultSet.TYPE_SCROLL_SENSITIVE.游标可以向前和向后滚动,结果集对创建结果集后其他人对数据库所做的更改很敏感。

ResultSet的并发性

可能的RSConcurrency如下所示。 如果未指定任何并发类型,则将自动获得CONCUR_READ_ONLY。

并发描述
ResultSet.CONCUR_READ_ONLY创建只读结果集。 这是默认值
ResultSet.CONCUR_UPDATABLE创建可更新的结果集。

到目前为止我们编写的所有示例都可以编写如下,它初始化一个Statement对象以创建一个只进,只读的ResultSet对象 -

try {
   Statement stmt = conn.createStatement(
                           ResultSet.TYPE_FORWARD_ONLY,
                           ResultSet.CONCUR_READ_ONLY);
}
catch(Exception ex) {
   ....
}
finally {
   ....
}

导航结果集

ResultSet接口中有几个涉及移动光标的方法,包括 -

SN方法和描述
1public void beforeFirst() throws SQLException

将光标移动到第一行之前。

2public void afterLast() throws SQLException

将光标移动到最后一行之后。

3public boolean first() throws SQLException

将光标移动到第一行。

4public void last() throws SQLException

将光标移动到最后一行。

5public boolean absolute(int row) throws SQLException

将光标移动到指定的行。

6public boolean relative(int row) throws SQLException

将光标从当前指向的位置向前或向后移动给定的行数。

7public boolean previous() throws SQLException

将光标移动到上一行。 如果前一行不在结果集中,则此方法返回false。

8public boolean next() throws SQLException

将光标移动到下一行。 如果结果集中没有更多行,则此方法返回false。

9public int getRow() throws SQLException

返回光标指向的行号。

10public void moveToInsertRow() throws SQLException

将光标移动到结果集中的一个特殊行,该行可用于将新行插入数据库。 记住当前光标位置。

11public void moveToCurrentRow() throws SQLException

如果光标当前位于插入行,则将光标移回当前行; 否则,这种方法什么都不做

为了更好地理解,让我们研究一下导航 - 示例代码

查看结果集

ResultSet接口包含许多用于获取当前行数据的方法。

每种可能的数据类型都有一个get方法,每个get方法有两个版本 -

  • 一个接受列名称的人。

  • 一个接受列索引的。

例如,如果您要查看的列包含int,则需要使用ResultSet的getInt()方法之一 -

SN方法和描述
1public int getInt(String columnName) throws SQLException

返回名为columnName的列中当前行的int。

2public int getInt(int columnIndex) throws SQLException

返回指定列索引中当前行的int。 列索引从1开始,表示行的第一列为1,行的第二列为2,依此类推。

类似地,ResultSet接口中的get方法适用于八种Java原始类型中的每一种,以及常见类型,如java.lang.String,java.lang.Object和java.net.URL。

还有获取SQL数据类型java.sql.Date,java.sql.Time,java.sql.TimeStamp,java.sql.Clob和java.sql.Blob的方法。 有关使用这些SQL数据类型的更多信息,请查看文档。

为了更好地理解,让我们研究一下查看 - 示例代码

更新结果集

ResultSet接口包含一组更新方法,用于更新结果集的数据。

与get方法一样,每种数据类型都有两种更新方法 -

  • 一个接受列名称的人。

  • 一个接受列索引的。

例如,要更新结果集的当前行的String列,您将使用以下updateString()方法之一 -

SN方法和描述
1public void updateString(int columnIndex, String s) throws SQLException

将指定列中的String更改为s的值。

2public void updateString(String columnName, String s) throws SQLException

与前一个方法类似,不同之处在于列的名称由其名称而不是索引指定。

有八种原始数据类型的更新方法,以及java.sql包中的String,Object,URL和SQL数据类型。

更新结果集中的行会更改ResultSet对象中当前行的列,但不会更改基础数据库中的列。 要更新对数据库中行的更改,需要调用以下方法之一。

SN方法和描述
1public void updateRow()

通过更新数据库中的相应行来更新当前行。

2public void deleteRow()

从数据库中删除当前行

3public void refreshRow()

刷新结果集中的数据以反映数据库中的任何最新更改。

4public void cancelRowUpdates()

取消对当前行进行的任何更新。

5public void insertRow()

在数据库中插入一行。 只有在光标指向插入行时才能调用此方法。

为了更好地理解,让我们研究更新 - 示例代码