有没有办法提前中止交易?说,我已经向数据库发送了一个命令,运行五分钟,四分之后,我想中止它.
JDBC是否定义了一种方法来向数据库发送"停止在此连接上执行的任何操作"信号?
正如james所提到的,Statement.cancel()将取消正在运行的Statement(select,update等)的执行.JDBC文档特别指出Statement.cancel()从另一个线程运行是安全的,甚至建议在超时线程中调用它.
取消声明后,您仍然无法回滚事务.这没有记录为从另一个线程运行是安全的.该Connection.rollback()应该在主线程中完成所有其他JDBC调用发生.在取消的Statement.execute ...()调用以JDBCException(由于取消)完成后,您可以处理该问题.
我猜你想要做的是阻止你的应用程序阻止长时间运行的查询/事务.为此,JDBC支持查询超时的概念.您可以使用以下命令设置查询超时:
java.sql.Statement.setQueryTimeout(seconds)
并通过回滚事务来处理方法SQLException
引发的抛出execute()
(当然,只有在autocommit设置为false且JDBC驱动程序支持Statement.cancel()时才会起作用).
查看Statement.cancel().