是否使用JDBC確定我未提交活動事務? 我想確保所有事務都在Connection.close()之前被提交或回滾。JDBC確定活動事務
2
A
回答
1
有沒有標準的JDBC方法做你想要什麼。但是,如果你想確保所有事務的提交/的Connection.close()之前rollbacked,你可以這樣做:
Connection conn = null;
try {
conn = ...;
conn.setAutoCommit(false);
// do stuff
// commit only if everything is successful
conn.commit();
}
catch (SomeException e) {
// log exceptions
}
finally {
if (conn != null) {
/* ALWAYS rollback before closing the connection
* if there's any caught/uncaught exception, the transaction will be rolled back
* if everything is successful/commit is successful, the rollback will have no effect
*/
try {
conn.rollback();
}
catch (SQLException e) {}
try {
conn.close();
}
catch (SQLException e) {}
}
}
這比回滾只有當有一個例外(catch塊)更好,因爲,如果有任何未捕獲的異常:
- 回滾()不會被調用
- 的Connection.close,同時有一個活動的事務,會發生什麼活動事務是實現特定的()將被調用。見Bogdan Calmac's answer。
+0
「沒有標準的JDBC方法來執行您想要的操作。」 - 這是答案。謝謝。 – 2014-11-02 19:42:59
0
您可以查看Oracle提供的V$TRANSACTION
視圖。
SELECT
s.osuser, vp.spid as os_pid, S.BLOCKING_SESSION blocker,
S.SID, S.SERIAL#, S.USERNAME, S.MACHINE,
Q.SQL_FULLTEXT cur_sql, PQ.SQL_FULLTEXT prev_sql,
vt.used_urec, vt.start_date
FROM
v$session S
LEFT JOIN v$sqlarea Q on S.SQL_ID = Q.SQL_ID
LEFT JOIN v$sqlarea PQ on S.PREV_SQL_ID = PQ.SQL_ID
LEFT JOIN v$process vp on s.paddr = vp.addr
LEFT JOIN v$transaction vt on s.saddr = vt.ses_addr
WHERE
vt.start_date < SYSDATE - (5/1440)
-- AND
-- s.machine = 'machine.name'
ORDER BY
S.SID
;
查詢來源:What I Learned Today
+0
謝謝。但我想找到獨立於DBMS的方式。 – 2014-10-30 18:07:48
相關問題
- 1. JDBC事務
- 2. 啓動新活動時發生綁定事務失敗活動
- 3. 有沒有辦法確定JDBC事務是否有效?
- 4. JDBC事務開始
- 5. 如何在JDBC中啓動事務?
- 6. 休眠活動事務
- 7. 當回滾JDBC事務
- 8. JDBC中的事務狀態
- 9. 混合JTA和JDBC事務
- 10. JDBC事務不起作用
- 11. 確定當前活動Android
- 12. 確定活動面板
- 13. 如何確定哪個活動啓動了一項服務?
- 14. Phonegap - 確定確切的元素活動
- 15. 在Java中使用JDBC事務的正確方法是什麼?
- 16. 以正確的方式執行jdbc事務
- 17. 確定哪個故事板處於活動狀態
- 18. 服務綁定到活動
- 19. 活動,服務綁定
- 20. Hibernate事務,承諾無效無活動事務
- 21. 確定拖動事件jquery
- 22. DataDirect Mongo JDBC驅動程序 - 無效事務狀態:只讀SQL事務
- 23. JDBC SqlParameterValue - 確定參數
- 24. javax.persistence.TransactionRequiredException:沒有活動的事務PuId =
- 25. 片段事務和活動轉換
- 26. 檢查MySQL中的活動事務
- 27. 休眠單個會話活動事務
- 28. 在活動事務中執行Flush()
- 29. hibernate - getCurrentSession - 無活動事務無效
- 30. 從BroadcastReceiver開始從事服務活動
相似但不相同的問題,也許它不會幫助你:http://stackoverflow.com/questions/1299694/oracle-how-to-find-out-if-there-is-a-transaction-正在等待 – 2014-10-30 12:21:30
如何在您創建並使用您的代碼的連接上進行活動事務?你是否分享線程之間的連接? – beny23 2014-11-01 11:31:16
測試需要。檢查交易是否已結束。 – 2014-11-02 19:41:18