只读了几行后是否可以关闭ResultSet
?有时我必须发出一个返回10mil行的查询,即使后面的代码我知道我不需要10mil只需20或50或1000 ..
我有这个代码可以创建流式传输ResultSet
,但它冻结在rs.close()
上 - 我想从尝试读取剩余的行。因此,它不会在几毫秒内完成,而是会挂起几分钟......
PreparedStatement stmt = con.prepareStatement("select * from users",
ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getString("name"));
break;
}
rs.close();
con.close();
答案 0 :(得分:0)
MySQL Bugs: #95763: can not closed streaming result set
根据 MySQL Verification Team 的回应,这是 MySQL 协议的工作原理。
但 Mark Matthews 提供了另一种方式:
<块引用>如果客户端不想等待,唯一的选择是关闭与 MySQL 的连接。