JDBC中的事务状态

5
有没有办法在JDBC中知道事务是否处于“进行中”状态?我在连接API中找不到任何信息。

谢谢


你会如何定义“持续状态”? - skaffman
我的意思是“脏”操作——更新、插入和删除行。 - cadrian
1个回答

4

JDBC 不会跟踪事务状态。跟踪事务状态是数据库的工作。

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

您可以向数据库发出 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;

另一个解决方案是在一些常见框架中使用事务管理器代码,例如 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;
}

谢谢你的Oracle提示,这会对我很有帮助。 - cadrian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接