java - 检测 JDBC 连接中尚未提交的打开事务

标签 java jdbc transactions connection-pooling

我如何检测事务是否保持打开状态,是否仍等待 JDBC 上的 COMMITROLLBACK Connection

我通过连接池获取连接对象。所以我想在使用之前检查连接的状态。

使用 Postgres 9.x 和 Java 8。

最佳答案

我不知道有什么方法可以仅使用标准 JDBC API 方法来检测 Connection 上的当前事务状态。

但是,对于 PostgreSQL 特别是,有 AbstractJdbc2Connection.getTransactionState() ,您可以将其与常量 ProtocolConnection.TRANSACTION_IDLE 进行比较. PostgreSQL 的 JDBC4 Connection 扩展了这个类,所以你应该能够转换你的 Connection 来访问这个属性。

该常量是 pgjdbc 驱动程序中定义的三个值之一 source code :

/**
 * Constant returned by {@link #getTransactionState} indicating that no
 * transaction is currently open.
 */
static final int TRANSACTION_IDLE = 0;

/**
 * Constant returned by {@link #getTransactionState} indicating that a
 * transaction is currently open.
 */
static final int TRANSACTION_OPEN = 1;

/**
 * Constant returned by {@link #getTransactionState} indicating that a
 * transaction is currently open, but it has seen errors and will
 * refuse subsequent queries until a ROLLBACK.
 */
static final int TRANSACTION_FAILED = 2;

关于java - 检测 JDBC 连接中尚未提交的打开事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31754214/

相关文章:

java - 无法从 Spring 应用程序连接到 mssql 服务器

java - 无法在 Jboss 7.1.1 中创建 mysql 数据源

java oracle jdbc 结果集为空,但表中记录可用

node.js - 当异常抛出时,Sequelize 事务不会回滚

java - 重新定义 webapp 位置 - web 资源的 maven 标准文件夹

java - Cassandra 批量查询与单次插入性能

java - Ant 不要开始 war 目标

spring - REST 幂等实现 - 如何在已处理请求时回滚?

database - 单元测试数据库

javascript - Java 中的等效数据结构?