我有以下java代码片段:
Connection conn = DriverManager.getConnection(connString, user, password);
Statement stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);
stmt.setMaxRows(100);
stmt.setQueryTimeout(2);
try {
stmt.execute("SELECT SLEEP(100)"); // (1)
} finally {
stmt.close();
conn.close();
}
它旨在模拟将超时的长时间运行的查询。但是,它引发了一个不是预期的异常:
流式结果集com.mysql.jdbc.RowDataDynamic @仍然是 活性。任何流式传输结果集都不会发出任何声明 在给定连接上打开和使用。确保你已经打过电话 在尝试更多之前,对任何活动的流式结果集执行.close() 查询。 java.sql.SQLException:流结果集 com.mysql.jdbc.RowDataDynamic @仍处于活动状态。没有 当任何流式传输结果集打开时,可以发出语句 在给定连接上使用。确保已调用.close() 在尝试更多查询之前,任何活动的流式结果集都会设置。
仔细观察,当close方法尝试将MaxRows
重置为其默认值时,会出现错误。但是,如果我用
stmt.executeQuery("SELECT SLEEP(100)");
提出了适当的例外com.mysql.jdbc.exceptions.MySQLTimeoutException
。
我想运行执行,流式处理结果,对行数有限制,并且不会出现此错误。有什么建议吗?