JDBC - 结果集

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

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

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

  • 导航方法:用于移动光标.

  • 获取方法:用于查看光标指向的当前行的列中的数据.

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

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

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

  • 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的并发性

可能性e 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方法&描述
1 public void beforeFirst() throws SQLException

将光标移到第一行之前.

2 public void afterLast() throws SQLException

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

3 public boolean first()throws SQLException

将光标移动到第一行.

4 public void last()抛出SQLException

将光标移动到最后一行.

5 public boolean absolute(int row) throws SQLException

将光标移动到指定的行.

6 public boolean relative(int row)throws SQLException

将光标向前移动给定的行数或者向后,fr om当前是
指向.

7 public boolean previous()throws SQLException

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

8 public boolean next()throws SQLException

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

9 public int getRow()throws SQLException

返回光标所指向的行号.

10 public void moveToInsertRow() throws SQLException

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

11 public void moveToCurrentRow() throws SQLException

如果光标当前位于插入行,则将光标移回当前行;
否则,此方法不执行任何操作


查看结果集

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

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

  • 一个接受列名的.

  • 收集列索引的那个.

例如,如果你是列有兴趣查看包含一个int,你需要使用ResultSet的一个getInt()方法 :

SNMethods&描述
1 public int getInt(String columnName)throws SQLException

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

2 public int getInt(int columnIndex)throws SQLException

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

同样,在ResultSet接口中有八种Java基元类型中的每一种的get方法,以及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方法&说明
1 public void updateString(int columnIndex,String s)抛出SQLException

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

2 public void updateString(String columnName,String s)抛出SQLException

与上一个方法类似,但是该列是由其名称而不是其索引指定的
.

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

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

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

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

2 public void deleteRow()

从数据库中删除当前行

3 public void refreshRow()

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

4 public void cancelRowUpdates()

取消对当前行所做的任何更新.

5 public void insertRow ()

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