在java中需要ResultSet的帮助

时间:2011-07-29 10:17:42

标签: java jdbc resultset

我使用ResultSet从我的SQL服务器检索数据。代码如下:

ResultSet rs = getValueFormTable();

我像这样循环ResultSet

do{
   // process data
} while(rs.next());

假设有10条记录,我处于ResultSet的第四个值。我需要将第五个ResultSet记录中的一个值再次返回到第四个Resultset记录。

这可能吗?

3 个答案:

答案 0 :(得分:7)

  

假设有10条记录,我在第四个ResultSet值。出现这种情况,我需要将第五个ResultSet的一个值再次返回到第四个Resultset。这可能在java?

您需要“可滚动”ResulSet实例来实现滚动结果集;如果您需要更新以前的结果集,那么您需要可滚动和可更新的结果集(最后一段讨论可更新的结果集)。通常情况下,ResultSetTYPE_FORWARD_ONLY,并且只能使用next()方法向前滚动。

您需要创建ResultSet TYPE_SCROLL_INSENSITIVETYPE_SCROLL_SENSITIVE类型的absolute()实例,以调用previous()ResultSet等其他方法来回移动ResultSet

创建可滚动的ResultSet要求您指定StatementPreparedStatement对象返回的TYPE_FORWARD_ONLY类型,默认类型为PreparedStatement pStmt = Connection.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet rs = pStmt.executeQuery(); ... // You can now invoke rs.previous(), rs.absolute(n) etc. to move back and forth. as早先说过。演示如何操作的片段如下所示:

ResultSet

您可能希望了解如何在Connection.createStatementConnection.prepareStatementConnection.prepareCall方法中具体说明ResultSet的类型。

如果要修改updateXXX的内容而不只是从中读取,则需要创建“可更新”的ResultSet。通过将ResultSet并发类型指定为CONCUR_UPDATABLE,可以轻松完成此操作。然后,您可以调用任何{{1}}方法,并使用updateRow方法跟踪它们以更新基础数据源。

答案 1 :(得分:1)

是的,如果您有TYPE_SCROLL_INSENSITIVETYPE_SCROLL_SENSITIVE ResultSet

,则可以

使用ResultSet.previous

(当你在第一行时,对ResultSet.previous的调用将返回false(但不会抛出任何异常),但是对任何需要当前行的方法的任何后续调用,如resultSet.getString会抛出SQLException。您可以通过查看ResultSet.isFirst

来处理此问题

ResultSet有很多这样的方法,看看docs一次。

答案 2 :(得分:1)

首先do-while不是从ResultSet中获取结果的好方法。我会让你重新使用while循环。

while( rs.next() ){
    ...
}

二。是的,有一种方法可以回到上一行(如果有的话)。

if( rs.previous() ){
    //Do what value you want from previous record and jump to next record.
}