有没有办法知道JDBC中的事务是否处于“持续”状态?我在Connection API中找不到任何内容。
由于
答案 0 :(得分:4)
JDBC不跟踪事务状态。 DB的工作是跟踪事务状态。
鉴于此,您仍然有两种方法来跟踪/了解交易状态。
您可以对数据库进行SQL调用,以询问特定于事务的详细信息。对于oracle,它将在this post中建议的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;
}