有没有办法提前中止交易?说,我已经向数据库发送了一个命令,该命令运行五分钟,四分之后,我想中止它。
JDBC是否定义了一种方法来向数据库发送“停止对此连接执行的任何操作”信号?
答案 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是否定义了一些扩展来支持它。