我使用ResultSet
从我的SQL服务器检索数据。代码如下:
ResultSet rs = getValueFormTable();
我像这样循环ResultSet
:
do{
// process data
} while(rs.next());
假设有10条记录,我处于ResultSet
的第四个值。我需要将第五个ResultSet
记录中的一个值再次返回到第四个Resultset
记录。
这可能吗?
答案 0 :(得分:7)
假设有10条记录,我在第四个ResultSet值。出现这种情况,我需要将第五个ResultSet的一个值再次返回到第四个Resultset。这可能在java?
您需要“可滚动”ResulSet
实例来实现滚动结果集;如果您需要更新以前的结果集,那么您需要可滚动和可更新的结果集(最后一段讨论可更新的结果集)。通常情况下,ResultSet
为TYPE_FORWARD_ONLY
,并且只能使用next()
方法向前滚动。
您需要创建ResultSet
TYPE_SCROLL_INSENSITIVE
或TYPE_SCROLL_SENSITIVE
类型的absolute()
实例,以调用previous()
和ResultSet
等其他方法来回移动ResultSet
。
创建可滚动的ResultSet
要求您指定Statement
或PreparedStatement
对象返回的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.createStatement
,Connection.prepareStatement
和Connection.prepareCall
方法中具体说明ResultSet的类型。
如果要修改updateXXX
的内容而不只是从中读取,则需要创建“可更新”的ResultSet。通过将ResultSet并发类型指定为CONCUR_UPDATABLE
,可以轻松完成此操作。然后,您可以调用任何{{1}}方法,并使用updateRow
方法跟踪它们以更新基础数据源。
答案 1 :(得分:1)
是的,如果您有TYPE_SCROLL_INSENSITIVE或TYPE_SCROLL_SENSITIVE ResultSet
(当你在第一行时,对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.
}