ResultSet结果集

来源:互联网 发布:淘宝千里眼在线人数 编辑:程序博客网 时间:2024/05/16 04:25

所有的超级接口:AutoCloseable, Wrapper
所有的子接口:CachedRowSet, FilteredRowSet, JdbcRowSet, JoinRowSet, RowSet, SyncResolver, WebRowSet

将数据库中的数据以表格的形式转换到ResultSet中,通常是通过数据库查询语句查询数据库产生的。
一个ResultSet的操作主要是通过指向当前行数据的指针实现的。默认情况下指针是指向第一行数据之前(因此要得到想要的数据,首先得把指针移到对应的行)。next()方法将当前指向的指针移向下一行,并且当ResultSet对象不存在下一行时会返回false,因此可以在循环中迭代ResultSet中的所有数据。
ResultSet对象是不可改变的,并且指针只能“往下移”。因此,在迭代的时候只能一次一次来,并且只能从第一行到最后一行。当然实现ResultSet的往返或者说是更新也是可能的。下面一些代码碎片,是为了说明ResultSet是可以滚动的并且对于更新操作来说是迟钝的,而且ResultSet是可更新的,其中con是一个有效的collection对象,

Statement stmt = con.createStatement(    ResultSet.TYPE_SCROLL_INSENSITIVE,    ResultSet.CONCUR_UPDATABLE);ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");       // rs可以滚动,并且不能改变       // 指针可以改变位置

在当前行中可以使用getter()方法(getBoolean(),getLong(),…)来检索列的值。并且值是可以通过列的索引或者列的属性名来检索的。但是总体上使用列的索引来检索更有效。列的索引是从1开始的。为保证最大限度的移植,ResultSet中的每行之中列应该从左到右按顺序读取,并且每行只能读一次。
对于getter()方法,JDBC driver希望将底层数据转换成java类型的数据,这就使通过相应的getter()方法并且最后返回一个合适的java类型的值。JDBC driver说明书中就展示了相关的数据映射,通过ResultSet中getter方法将SQL中的数据,转换为java类型的数据。

getter()方法中如果是输入列名来获取值,那么列名是不需要区分大小写的。如果getter()获取值的列名有重复的情况,那么最后返回的值是第一次成功匹配的。一般使用列名是在通过数据库查询语句产生ResultSet时。数据库查询时不是必须使用列名,也可以通过列的索引。而且最好是使用列的索引。如果使用列名,则必须保证程序中的列名必须和相应的列一一对应,这是可以使用数据库中as句子来确保。

JDBC 2.0中加入了一系列updater()方法。有一些说法是:getter()方法中参数也可以应用到updater()方法中参数。
Updater()方法可以以下两种方法实现
1、 更新当前行中列的值。
在可以滚动的ResultSet对象中,指针可以来回移动,移到一个确定的位置,或者说是与当前位置相对的位置。下面的代码碎片的功能是更新ResultSet对象rs的第五行名为NAME的列,然后使用updateRow()方法更新rs导出的数据资源表。

rs.absolute(5); // 将指针移到rs中的第五行rs.updateString("NAME", "AINSWORTH"); // 将改行名为NAME列更新为AINSWORTHrs.updateRow(); // 更新整行的数据资源

2、 将插入到列中值再插入到行。
可更新的ResultSet集对象有一个特殊的行,该行与将要插入点行相关。下面的代码片段将指针移动到将要插入的行,然后创建了一个拥有三列的行,在讲改行插入到rs中,最后视同insertRow()的方法将rs插入数据资源表中。

rs.moveToInsertRow(); // 将指针移动到插入的行rs.updateString(1, "AINSWORTH"); // 将改行的第一列的列名改为AINSWORTHrs.updateInt(2,35); // 将改行的第二列改为35rs.updateBoolean(3, true); // 将改行的第三列改为truers.insertRow();rs.moveToCurrentRow();

当Statement对象关闭,重新执行,或者是用于检索一系列结果集中的下一个结果集时ResultSet对象会自动关闭。ResultSet对象的列的编号,类型以及属性是通过 ResultSetMetaData对象返回的 ResultSet.getMetaData()方法提供的。

0 0
原创粉丝点击