2009-10-05 89 views
5

有沒有辦法知道JDBC中的事務是否處於「正在進行」狀態?我在Connection API中找不到任何東西。JDBC中的事務狀態

謝謝

+0

你會如何定義「持續狀態」? – skaffman 2009-10-05 16:16:40

+0

我的意思是像「髒」 - 更新,插入和刪除行。 – cadrian 2009-10-06 07:47:44

回答

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; 
} 
+0

感謝oracle的提示,它會幫助我。 – cadrian 2009-10-06 07:48:22