我正在尝试使用 connection.commit()
应该关闭所有非保留结果集这一事实。我应该怎么做才能确保 connection.commit()
关闭所有未保存的结果集?
我有以下源码
conn.setAutoCommit(false);
conn.setHoldability(CLOSE_CURSORS_AT_COMMIT);
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY,
ResultSet.CLOSE_CURSORS_AT_COMMIT);
ResultSet rs = stmt.executeQuery("select * from dummy");
System.out.println("default holdability " + conn.getMetaData().getResultSetHoldability());
//System.out.println("rs holdability " + rs.getHoldability());
conn.commit();
rs.getStatement().isClosed(); //this is false with postgres and mysql
当我阅读 JDBC 规范时,当在连接上发出提交时,非保留结果集将被关闭。我现在已经用 PostgreSQL 试过了
、MySQL 和 DB2。只有 DB2 实际上关闭了结果集。 PostgreSQL 和 MySQL 保持结果集打开。 PostgreSQL 实际上非常有趣,即使当我显式关闭连接时,结果集仍标记为打开状态。我正在寻找一种可靠的方法来确保在提交后关闭未保留的结果集。我试图为数据库设置默认的可保留性,但这没有任何效果,同样,当我使用 createStatment
和使用 CLOSE_CURSORS_AT_COMMIT
时,这在 PostgreSQL 和 MySQL 中也没有效果。
最佳答案
这听起来像是一个错误。
你应该打开一个 issue使用 PostgreSQL JDBC 驱动程序。
关于mysql - CLOSE_CURSORS_AT_COMMIT 为 postgres 设置,但结果集在提交后保持打开状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44493024/