如何中止正在运行的JDBC事务?

Aar*_*lla 27 java jdbc

有没有办法提前中止交易?说,我已经向数据库发送了一个命令,运行五分钟,四分之后,我想中止它.

JDBC是否定义了一种方法来向数据库发送"停止在此连接上执行的任何操作"信号?

Joh*_*n M 33

正如james所提到的,Statement.cancel()将取消正在运行的Statement(select,update等)的执行.JDBC文档特别指出Statement.cancel()从另一个线程运行是安全的,甚至建议在超时线程中调用它.

取消声明后,您仍然无法回滚事务.这没有记录为从另一个线程运行是安全的.该Connection.rollback()应该在主线程中完成所有其他JDBC调用发生.在取消的Statement.execute ...()调用以JDBCException(由于取消)完成后,您可以处理该问题.

  • 这是调用 `Statement.cancel()` 时特定于 oracle 的行为:http://stackoverflow.com/a/659063/603516 (2认同)

Gow*_*wri 14

我猜你想要做的是阻止你的应用程序阻止长时间运行的查询/事务.为此,JDBC支持查询超时的概念.您可以使用以下命令设置查询超时:

java.sql.Statement.setQueryTimeout(seconds)
Run Code Online (Sandbox Code Playgroud)

并通过回滚事务来处理方法SQLException引发的抛出execute()(当然,只有在autocommit设置为false且JDBC驱动程序支持Statement.cancel()时才会起作用).


小智 5

查看Statement.cancel().