JDBC中的事务状态

cad*_*ian 5 java transactions jdbc

有没有办法知道JDBC中的事务是否处于"持续"状态?我在Connection API中找不到任何内容.

谢谢

Osc*_*han 4

JDBC 不跟踪事务状态。跟踪事务状态是DB的工作。

鉴于此,您仍然有两种方法来跟踪/了解交易状态。

您可以对数据库进行 sql 调用以询问事务特定的详细信息。对于 Oracle,它将位于本文建议的 v$transaction 表中。

SELECT COUNT(*) 
  FROM v$transaction t, v$session s, v$mystat 
  WHERE t.ses_addr = s.saddr AND s.sid = m.sid AND ROWNUM = 1;
Run Code Online (Sandbox Code Playgroud)

另一种解决方案是在一些常见框架中使用事务管理器代码,例如hibernate(我相信Spring也有)。

public interface Session {
  public abstract org.hibernate.Transaction getTransaction();
}

public Transaction {
  public abstract boolean wasRolledBack() throws org.hibernate.HibernateException;

  public abstract boolean wasCommitted() throws org.hibernate.HibernateException;

  public abstract boolean isActive() throws org.hibernate.HibernateException;
}
Run Code Online (Sandbox Code Playgroud)