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