我们可以在遍历java中的结果集时执行一些查询

Bha*_*hah 6 java resultset

我正在尝试使用JDBC(如SQL中的存储过程)在Java中实现任务.在SQL中,当我们编写游标时,首先执行select查询然后获取我们执行某些操作的记录.

可能我在Hive中解雇了一个select查询.

sql="SELECT a,c,b FROM tbl_name";
res=stmt.executeQuery();    -----------> CONTAINS 30 RECORDS
while(res.next())
{
     sql="INSERT INTO table .....";
     rs1=stmt.executeQuery();

     sql="SELECT d,e,f FROM table .....";
     rs1=stmt.executeQuery();
     like wise many queries are there.....
.
.
.
..
}
Run Code Online (Sandbox Code Playgroud)

由于我的选择查询包含30条记录,但当我执行它时,我(while.inxt())只执行一次.

但是我只是尝试显示字段以检查它是否正在获取,而不是查询,然后它正常工作..(while循环只包含System.out.println语句)

sql="SELECT * FROM tbl_name";
res=stmt.executeQuery(sql);

while(res.next())
{
   S.O.P.("fields : "+res.getString(0));
}
Run Code Online (Sandbox Code Playgroud)

(我认为当结果集被遍历时,如果查询之间存在,那么查询将被执行但同时循环也会执行,并且在查询执行结束后的一段时间之后,reslutset的循环也会完成并且因此它会执行一次.我不确定.)

为什么会这样,我没有得到.我做错了什么?

Cam*_*ner 11

每个Statement只能一次打开ResultSet一个.从文档:

默认情况下,每个Statement对象只能同时打开一个ResultSet对象.因此,如果读取一个ResultSet对象与另一个ResultSet对象的读取交错,则每个ResultSet对象必须由不同的Statement对象生成.如果存在打开的对象,则Statement接口中的所有执行方法都会隐式关闭该语句的当前ResultSet对象.

对executeQuery循环内部的调用将隐式关闭外部ResultSet,这就是为什么你只看到一行.


Rah*_*kar 0

它不会发生那样的情况,您可以尝试直到您的查询被执行,循环将等待。