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

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

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

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

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

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

 java.sql.Statement.setQueryTimeout(seconds) 

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

查看Statement.cancel()。

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

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