您的位置:首页 > 产品设计 > UI/UE

No statements may be issued when any streaming result sets are open and in use on a given connection

2011-09-30 11:26 721 查看
Noways, i have encountered a problem about mysql and ResultSet.

the Exception Trace:

java.sql.SQLException: Streaming result set com.mysql.jdbc.RowDataDynamic@7834eb is still active. No statements may be issued when any streaming result sets are open and in use on a given connection. Ensure that you have called .close() on any active streaming
result sets before attempting more queries.

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:930)

at com.mysql.jdbc.MysqlIO.checkForOutstandingStreamingData(MysqlIO.java:2646)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1861)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2101)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2548)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1846)

By default, ResultSets are completely retrieved and stored in memory. In most cases this is the most efficient way to operate, and due to the design of the MySQL network protocol is easier to implement. If you are working with ResultSets that have a large number
of rows or large values, and can not allocate heap space in your JVM for the memory required, you can tell the driver to stream the results back one row at a time.

To enable this functionality, you need to create a Statement instance in the following manner:
stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);


The combination of a forward-only, read-only result set, with a fetch size of 
Integer.MIN_VALUE
 serves
as a signal to the driver to stream result sets row-by-row. After this any result sets created with the statement will be retrieved row-by-row.

There are some caveats with this approach. You will have to read all of the rows in the result set (or close it) before you can issue any other queries on the connection, or an exception will be thrown.
Reference:  http://bugs.mysql.com/bug.php?id=39156

                    http://dev.mysql.com/doc/refman/5.1/en/connector-j-reference-implementation-notes.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐