Java 如何运行Resultset.next()两次?
我有这个方法来获取一串行并打印它们 另外,我必须做两次Java 如何运行Resultset.next()两次?,java,sql,oracle,jdbc,resultset,Java,Sql,Oracle,Jdbc,Resultset,我有这个方法来获取一串行并打印它们 另外,我必须做两次while(Resultset.next())。第一个是获取行数,第二个是打印字符串。但是当该方法第一次运行Resultset.next()时,该方法将跳过第二次Resultset.next() 问题是,第一个Resultset.next()可以正常工作,但第二个不行 有人能解释一下原因吗?我怎样才能让它工作呢 注: 我知道,只需一个Resultset.next() 但我想做两次;) Secondrs.next()不起作用,因为在第一个循环中
while(Resultset.next())
。第一个是获取行数,第二个是打印字符串。但是当该方法第一次运行Resultset.next()
时,该方法将跳过第二次Resultset.next()
问题是,第一个Resultset.next()
可以正常工作,但第二个不行
有人能解释一下原因吗?我怎样才能让它工作呢
注:
我知道,只需一个Resultset.next()
但我想做两次;) Secondrs.next()
不起作用,因为在第一个循环中rs已经到达结束位置
您可以将re.next()
存储到临时变量中
例如ResultSet tmpRs_1=rs代码>
ResultSet tmpRs_2=rs代码>
然后用这两个变量做两个循环
或者
您可以在单个循环中执行所有操作。这样您就不需要进行两次循环。您可以如下初始化语句
conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
因此,可以在语句中移动光标
现在,你可以循环通过它
while(re.next())
num_row++;
re.beforeFirst();
但这是非常不必要的,最佳的解决方案是直接跳到集合的末尾并返回行
num_row = 0;
if(re.last()) {
num_row = rs.getRow();
re.beforeFirst();
}
你不能用一个循环,然后把两个操作都放在一个循环中吗?检查答案。为什么你不能只循环一次呢?对于您显示的代码,以这种方式单独计算没有意义。您不能这样做,因为tmpRs_1
和tmpRs_2
仍然是一个相同的ResultSet
。
num_row = 0;
if(re.last()) {
num_row = rs.getRow();
re.beforeFirst();
}