需要java中ResultSet的帮助吗

需要java中ResultSet的帮助吗,java,jdbc,resultset,Java,Jdbc,Resultset,我正在使用ResultSet从我的SQL server检索数据。代码如下所示: ResultSet rs=getValueFormTable(); 我在ResultSet上循环如下: do{ //过程数据 }while(rs.next()); 假设有10条记录,我在ResultSet的第四个值处。出现这样的情况,我需要再次获取第五个ResultSet记录的一个值,然后返回到第四个ResultSet记录 这可能吗?是的,如果您有一个或结果集 使用 (当您位于第一行时,对ResultSet.pr

我正在使用
ResultSet
从我的SQL server检索数据。代码如下所示:

ResultSet rs=getValueFormTable();
我在
ResultSet
上循环如下:

do{
//过程数据
}while(rs.next());
假设有10条记录,我在
ResultSet
的第四个值处。出现这样的情况,我需要再次获取第五个
ResultSet
记录的一个值,然后返回到第四个
ResultSet
记录


这可能吗?

是的,如果您有一个或
结果集

使用

(当您位于第一行时,对
ResultSet.previous
的调用将返回
false
(但不会引发任何异常),但对需要当前行的任何方法的任何后续调用,如
ResultSet.getString
将引发
SQLException
。您可以通过选中


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

是的,如果您有一个或
ResultSet

使用

(当您位于第一行时,对
ResultSet.previous
的调用将返回
false
(但不会引发任何异常),但对需要当前行的任何方法的任何后续调用,如
ResultSet.getString
将引发
SQLException
。您可以通过选中

ResultSet有很多这样的方法,请看一下

假设有10条记录,我在第四个ResultSet值中。接下来的情况是,我需要再次获取第五个ResultSet的一个值,并返回到第四个ResultSet。在java中可能吗

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

您需要创建类型为的
ResultSet
实例,或调用其他方法,如
absolute()
previous()
,以前后移动
ResultSet

创建可滚动的
ResultSet
需要指定
Statement
PreparedStatement
对象返回的
ResultSet
的类型,因为如前所述,默认类型为
type\u FORWARD\u 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.
您可能希望了解如何在、和方法中指定ResultSet的类型

如果您想修改
ResultSet
的内容,而不仅仅是从中读取,那么您需要创建“可更新的”ResultSets。通过将ResultSetConcurrency类型指定为,这很容易做到。然后,您可以调用任何
Updatexx
方法,并使用一个方法来更新基础数据源

假设有10条记录,我在第四个ResultSet值中。接下来的情况是,我需要再次获取第五个ResultSet的一个值,并返回到第四个ResultSet。在java中可能吗

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

您需要创建类型为的
ResultSet
实例,或调用其他方法,如
absolute()
previous()
,以前后移动
ResultSet

创建可滚动的
ResultSet
需要指定
Statement
PreparedStatement
对象返回的
ResultSet
的类型,因为如前所述,默认类型为
type\u FORWARD\u 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.
您可能希望了解如何在、和方法中指定ResultSet的类型


如果您想修改
ResultSet
的内容,而不仅仅是从中读取,那么您需要创建“可更新的”ResultSets。通过将ResultSetConcurrency类型指定为,这是很容易做到的。然后,您可以调用任何
Updatexx
方法,然后使用方法更新基础数据源。

首先
执行,而
不是从
ResultSet
中获取结果的好方法。我建议您se
while
循环

while( rs.next() ){
    ...
}
第二,是的,如果可以的话,有一种方法可以返回到前一行

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

首先,
do while
不是从
ResultSet
中获取结果的好方法。我建议您使用
while
循环

while( rs.next() ){
    ...
}
第二,是的,如果可以的话,有一种方法可以返回到前一行

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

不,很遗憾不是。您必须分两次处理数据:第一次将所有内容写入列表,第二次处理条目。您可以将结果集转换为数组并使用freely@Simon,@marioosh,为什么不
resultSet.previous
?不,不幸的是,它不是。您必须分两次处理数据:永远写入在第一个列表中,处理第二个列表中的条目。您可以将结果集转换为数组并使用freely@Simon,@marioosh,为什么不
resultSet.previous
?请注意,您不能指望它会被实现。例如,允许您连接到MS Access的JDBC-ODBC驱动程序只会抛出一个NotImplementedException,which是相当尴尬的。不过请注意,你不能指望它能实现