Jdbc 结果集多行

Jdbc 结果集多行,jdbc,resultset,Jdbc,Resultset,我使用jdbc连接到数据库,并将多行作为ResultSet的一部分。我从ResultSet运行了一个sql语句,但最终只运行了第一行。例如:query1是生成两行pid的结果集。然后,我使用query2终止pid。我希望query2遍历query1中的所有行并逐个执行terminate命令。另一点需要注意的是,根据结果集的不同,query1可以有2行以上。下面是我正在使用的代码,非常感谢您的帮助。顺便说一句,我确实尝试在while中使用嵌套for循环,但并没有像我在数据库日志中看到的那样重新发出

我使用jdbc连接到数据库,并将多行作为ResultSet的一部分。我从ResultSet运行了一个sql语句,但最终只运行了第一行。例如:query1是生成两行pid的结果集。然后,我使用query2终止pid。我希望query2遍历query1中的所有行并逐个执行terminate命令。另一点需要注意的是,根据结果集的不同,query1可以有2行以上。下面是我正在使用的代码,非常感谢您的帮助。顺便说一句,我确实尝试在while中使用嵌套for循环,但并没有像我在数据库日志中看到的那样重新发出query2

Statement stmt = connection.createStatement();

                                                    ResultSet res = stmt.executeQuery(
                                                            "SELECT \n" +
                                                                    "kl.pid as blocking_pid,\n" +
                                                                    "ka.usename as blocking_user,\n" +
                                                                    "ka.query as blocking_query,\n" +
                                                                    "bl.pid as blocked_pid,\n" +
                                                                    "a.usename as blocked_user, \n" +
                                                                    "a.query as blocked_query, \n" +
                                                                    "to_char(age(now(), a.query_start),'HH24h:MIm:SSs') as age\n" +
                                                                    "FROM pg_catalog.pg_locks bl\n" +
                                                                    "JOIN pg_catalog.pg_stat_activity a \n" +
                                                                    "ON bl.pid = a.pid\n" +
                                                                    "JOIN pg_catalog.pg_locks kl \n" +
                                                                    "ON bl.locktype = kl.locktype\n" +
                                                                    "and bl.database is not distinct from kl.database\n" +
                                                                    "and bl.relation is not distinct from kl.relation\n" +
                                                                    "and bl.page is not distinct from kl.page\n" +
                                                                    "and bl.tuple is not distinct from kl.tuple\n" +
                                                                    "and bl.virtualxid is not distinct from kl.virtualxid\n" +
                                                                    "and bl.transactionid is not distinct from kl.transactionid\n" +
                                                                    "and bl.classid is not distinct from kl.classid\n" +
                                                                    "and bl.objid is not distinct from kl.objid\n" +
                                                                    "and bl.objsubid is not distinct from kl.objsubid\n" +
                                                                    "and bl.pid <> kl.pid \n" +
                                                                    "JOIN pg_catalog.pg_stat_activity ka \n" +
                                                                    "ON kl.pid = ka.pid\n" +
                                                                    "WHERE kl.granted and not bl.granted\n" +
                                                                    "ORDER BY a.query_start");

                                                    //Get all the blocking pids and run pg_terminate_backend
                                                    while (res.next()) {
                                                         String pid = res.getString("blocking_pid");


                                                            stmt.execute("SELECT pg_terminate_backend(" + String.valueOf(pid) + ")");

                                                        }


                                                    stmt.close();
                                                    connection.close();
语句stmt=connection.createStatement(); ResultSet res=stmt.executeQuery( “选择\n”+ kl.pid作为阻塞\u pid\n+ ka.usename作为阻止用户,\n+ ka.query作为阻塞\u查询,\n+ bl.pid被阻止\u pid\n+ a.usename作为被阻止的\u用户,\n+ a.查询被阻止\u查询,\n+ “将字符(age(now(),a.query_start),'HH24h:MIm:SSs')作为年龄\n”+ “从pg_catalog.pg_locks bl\n”+ “加入pg_catalog.pg_stat_活动a\n”+ “ON bl.pid=a.pid\n”+ “加入pg_catalog.pg_locks kl\n”+ “在bl.locktype=kl.locktype上\n”+ “和bl.database与kl.database没有区别\n”+ “和bl.relation与kl.relation没有区别\n”+ “和bl.page与kl.page没有区别\n”+ “和bl.tuple与kl.tuple没有区别\n”+ “bl.virtualxid与kl.virtualxid没有区别\n”+ “bl.transactionid与kl.transactionid没有区别\n”+ “bl.classid与kl.classid没有区别\n”+ “bl.objid与kl.objid没有区别\n”+ “bl.objsubid与kl.objsubid没有区别\n”+ “和bl.pid kl.pid\n”+ “加入pg_catalog.pg_stat_活动ka\n”+ “在kl.pid=ka.pid上\n”+ “其中kl.grated和not bl.grated\n”+ “a.query_start订单”); //获取所有阻塞PID并运行pg_terminate_后端 while(res.next()){ 字符串pid=res.getString(“阻塞pid”); stmt.execute(“选择pg_terminate_后端(“+String.valueOf(pid)+”); } stmt.close(); connection.close();
我想出来了。以防有人面临相同/类似的问题。我在query2中使用相同的变量重用jdbc连接。一旦我在query2中使用了一个单独的jdbc调用,它就工作了