在读取MySQL 5.6.x上的所有内容之前关闭流式jdbc ResultSet

时间:2018-03-12 09:35:13

标签: mysql jdbc resultset

只读了几行后是否可以关闭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();

1 个答案:

答案 0 :(得分:0)

MySQL Bugs: #95763: can not closed streaming result set

根据 MySQL Verification Team 的回应,这是 MySQL 协议的工作原理。

但 Mark Matthews 提供了另一种方式:

<块引用>

如果客户端不想等待,唯一的选择是关闭与 MySQL 的连接。