需要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
中获取结果的好方法。我建议您sewhile
循环
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是相当尴尬的。不过请注意,你不能指望它能实现