JDBC API 4.2(八):ResultSet 接口源码分析

1、简介

ResultSet 接口提供了用于检索和处理已获得结果集的方法,并且ResultSet对象具有不同的功能和特性。 这些特性是type(类型), concurrency(并发性), cursor holdability(游标可保持性)。

ResultSet 对象维护一个游标,该游标指向其当前数据行。 next 方法将光标移动到下一行,当ResultSet对象中没有更多行时它返回false,因此可以在while循环中使用它来迭代结果集。

默认的 ResultSet 对象是不可更新的,并且只有仅向前移动的光标。 因此,您只能从第一行到最后一行迭代一次。

可以生成可滚动或可更新的ResultSet对象。 下面的代码片段(其中con是有效的Connection对象)说明了如何创建一个可滚动且对其他更新不敏感并且可更新的结果集。

Statement stmt = con.createStatement(
                                      ResultSet.TYPE_SCROLL_INSENSITIVE,
                                      ResultSet.CONCUR_UPDATABLE);
       ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");

ResultSet 接口提供了用于从当前行检索列值的getter方法(getBoolean,getLong等)。 可以使用列的索引号或列的名称来检索值。 通常,使用列索,列索引编号从1开始编号。为了实现最大的可移植性,应按从左到右的顺序读取每一行中的结果集列,并且每一列只能读取一次。

对于getter方法,JDBC驱动程序尝试将基础数据转换为getter方法中指定的Java类型,并返回合适的Java值。 JDBC规范具有一个表,该表显示了ResultSet getter方法可以使用的从SQL类型到Java类型的映射。

用作getter方法的列名不区分大小写。 当使用列名调用getter方法并且多个列具有相同的名称时,将返回第一个匹配列的值。 对于在查询中未明确命名的列,最好使用列号。 如果使用了列名,则应注意确保它们的唯一,这可以通过SQL AS子句来确保。

在JDBC 2.0 API(Java™2 SDK,标准版,版本1.2)中,向该接口添加了一组更新程序方法。 有关getter方法的参数的注释也适用于updater方法的参数。

更新方法有两种使用方式:

1、更新当前行中的列值:在可滚动的ResultSet对象中,光标可以前后移动,移动到绝对位置或相对于当前行的位置。 下面的代码片段更新ResultSet对象rs的第五行中的NAME列,然后使用方法 updateRow 来更新 rs 数据源。

        rs.absolute(5); // 移动光标到 rs 的第五行
       rs.updateString("NAME", "AINSWORTH"); // 更新第五行 NAME 列的值为 AINSWORTH
       rs.updateRow(); // 更新当前数据源 rs 中的第五行操作

2、将列值插入到插入行中:可更新的ResultSet对象具有与其关联的特殊行,该行用作构建要插入的行的暂存区。 下面的代码片段将光标移动到插入行,构建一个三列的行,然后使用insertRow方法将其插入rs和数据源表中。

       rs.moveToInsertRow(); // 移动游标到插入行
       rs.updateString(1, "AINSWORTH"); // 更新插入行第一列的值为 AINSWORTH
       rs.updateInt(2,35); // 更新第二列的值为 35
       rs.updateBoolean(3, true); // 更新第三列的值为 true
       rs.insertRow();
       rs.moveToCurrentRow();

ResultSet 对象的列的数量,类型和属性由ResultSet.getMetaData方法返回的ResultSetMetaData对象提供。

2、ResultSet 类图

在这里插入图片描述

3、ResultSet 重要方法

方法 描述
boolean absolute(int row) 将游标移动到此ResultSet对象中指定的行号。
afterLast() 将游标移动到该ResultSet对象的末尾,在最后一行之后。
beforeFirst() 将游标移动到该ResultSet对象的开头,在第一行之前。
cancelRowUpdates() 取消对此ResultSet对象中的当前行进行的更新。
clearWarnings() 清除此ResultSet对象上报告的所有警告。
close() 立即释放此ResultSet对象的数据库和JDBC资源。
deleteRow() 从此ResultSet对象和基础数据库中删除当前行。
findColumn(String columnLabel) 将给定的ResultSet列标签映射到其ResultSet列索引。
first() 将光标移动到此ResultSet对象的第一行。
int getRow() 检索当前行号。
RowId getRowId(int columnIndex) 以Java编程语言中java.sql.RowId对象的形式检索此ResultSet对象的当前行中指定列的值。
getStatement() 检索产生此ResultSet对象的Statement对象。
SQLWarning getWarnings() 检索此ResultSet对象上的调用报告的第一个警告。
void insertRow() 将插入行的内容插入到此ResultSet对象和数据库中。
boolean last() 将光标移动到此ResultSet对象的最后一行。
void moveToCurrentRow() 将光标移动到记住的光标位置,通常是当前行。
void moveToInsertRow() 将光标移动到插入行。
boolean next() 将光标从当前位置向前移动一行。
boolean previous() 将光标移动到此ResultSet对象的上一行。
void refreshRow() 用数据库中的最新值刷新当前行。
boolean rowDeleted() 检索是否已删除行。
boolean
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值