Java 如何中止正在运行的JDBC事务?
有没有办法提前中止事务?比如说,我向数据库发送了一个命令,该命令运行五分钟,四分钟后,我想中止它Java 如何中止正在运行的JDBC事务?,java,jdbc,Java,Jdbc,有没有办法提前中止事务?比如说,我向数据库发送了一个命令,该命令运行五分钟,四分钟后,我想中止它 JDBC是否定义了一种向DB发送停止连接信号的方法?不,您不能使用标准JDBC中止它 您可以尝试检查特定的RDBMS是否定义了一些扩展来支持它。我猜您想要做的是防止应用程序在长时间运行的查询/事务上阻塞。为此,JDBC支持查询超时的概念。您可以使用以下方法设置查询超时: java.sql.Statement.setQueryTimeout(seconds) 并通过回滚事务来处理execute方法引
JDBC是否定义了一种向DB发送停止连接信号的方法?不,您不能使用标准JDBC中止它
您可以尝试检查特定的RDBMS是否定义了一些扩展来支持它。我猜您想要做的是防止应用程序在长时间运行的查询/事务上阻塞。为此,JDBC支持查询超时的概念。您可以使用以下方法设置查询超时:
java.sql.Statement.setQueryTimeout(seconds)
并通过回滚事务来处理execute方法引发的SQLException。当然,只有当autocommit设置为false,并且JDBC驱动程序支持语句时,这才有效。cancel。签出语句。cancel。正如james提到的,将取消正在运行的语句select、update、,JDBC文档特别指出Statement.cancel可以安全地从另一个线程运行,甚至建议在超时线程中调用它
在取消该语句后,您仍然需要回滚事务。从另一个线程运行时没有安全记录。应该在主线程中执行所有其他JDBC调用。您可以在取消语句后处理它。执行。。。由于取消,调用完成时出现JDBCException。我已经让供应商告诉我这一点。如果某个特定的JDBC驱动程序没有实现Statement.cancel,那就是实现质量问题。它就在那里,并针对该用例进行了记录。我认为这是一种更好、更简单的方法,因为它允许胎面自行清洁,而不是让外部线程进行清洁,这总是涉及一组新的问题。以下是oracle在调用语句时的特定行为。取消: