是否使用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. 休眠活动事务
- 6. 当回滚JDBC事务
- 7. JDBC中的事务状态
- 8. 确定活动面板
- 9. 如何确定哪个活动启动了一项服务?
- 10. 确定哪个故事板处于活动状态
- 11. 在Java中使用JDBC事务的正确方法是什么?
- 12. 服务绑定到活动
- 13. 活动,服务绑定
- 14. Hibernate事务,承诺无效无活动事务
- 15. JDBC SqlParameterValue - 确定参数
- 16. DataDirect Mongo JDBC驱动程序 - 无效事务状态:只读SQL事务
- 17. javax.persistence.TransactionRequiredException:当前没有活动的事务
- 18. 片段事务和活动转换
- 19. 在活动事务中执行Flush()
- 20. hibernate - getCurrentSession - 无活动事务无效
- 21. SQL日志和活动事务
- 22. 如何确保服务从特定活动中被调用
- 23. 如何让服务绑定到正确的活动实例?
- 24. 当事务处于非事务中时回滚Spring JDBC操作
- 25. Android的导航和活动(确定哪些活动是父母)
- 26. JDBC上的活动或空闲连接
- 27. JBoss的事务回滚使用JDBC
- 28. Spring JDBC测试上的事务回滚
- 29. Spring JDBC出现随机回滚事务
- 30. 使用Spring JDBC轻松处理事务?
相似但不相同的问题,也许它不会帮助你: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