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

时间:2008-11-17 15:43:53

标签: java jdbc

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

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

4 个答案:

答案 0 :(得分:31)

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

取消声明后,您仍然处于回滚交易的工作中。这是 not 记录为从另一个线程运行是安全的。 Connection.rollback()应该在主线程中执行所有其他JDBC调用。在取消的Statement.execute ...()调用使用JDBCException(由于取消)完成后,您可以处理该问题。

答案 1 :(得分:13)

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

java.sql.Statement.setQueryTimeout(seconds)

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

答案 2 :(得分:5)

查看Statement.cancel()。

答案 3 :(得分:-5)

不,你不能使用标准JDBC中止它。

您可能会尝试检查您的特定RDBMS是否定义了一些扩展来支持它。