执行超时的Mysql异常

时间:2015-03-11 21:24:59

标签: java mysql jdbc

我有以下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重置为其默认值时,会出现错误。但是,如果我用

替换第(1)行
stmt.executeQuery("SELECT SLEEP(100)");

提出了适当的例外com.mysql.jdbc.exceptions.MySQLTimeoutException

我想运行执行,流式处理结果,对行数有限制,并且不会出现此错误。有什么建议吗?

0 个答案:

没有答案