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

标签 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 中也没有效果。

最佳答案

这听起来像是一个错误。

你应该打开一个 issue使用 PostgreSQL JDBC 驱动程序。

关于mysql - CLOSE_CURSORS_AT_COMMIT 为 postgres 设置,但结果集在提交后保持打开状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44493024/

相关文章:

java - JTable/JDBC 在 Eclipse 之外无法工作

php - 如何使我的删除查询完全正常工作?

postgresql - 如何组合自定义变量并将它们显示为 postgres 中的表记录

mysql - postgreSQL 到 MySQL 转换器

Django:JSONField + 全文搜索 + 索引 -> 序列扫描。如何配置索引工作?

java - Oracle和JDBC计算事务期间发生的执行次数及其性能

java - 如何合并单个sql表中两条记录的相同字段

php - 使用 PHP 和 MySQL 验证之间的日期

mysql - 如何使用窗口函数计算行值与其他行值(特别是排除该行)的差值之和

mysql - 更新表列使其成为主键