CLOSE_CURSORS_AT_COMMIT是为postgres设置的,但结果集在提交后仍保持打开状态

时间:2017-06-12 06:51:43

标签: mysql postgresql jdbc db2 commit

我试图使用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也没有影响。

1 个答案:

答案 0 :(得分:0)

这听起来像个错误。

您应该使用PostgreSQL JDBC驱动程序打开issue