不幸的是,jdbc规范对Statement.cancel()
的保证保持沉默。
javadoc所述的唯一内容是Statement.cancel()
是thread-safe。
但:
cancel()
始终有效?(以当前正在执行Statement
的主题将立即取消阻止并继续执行的方式)cancel()
不会阻止和(或多或少)立即返回?答案 0 :(得分:3)
是否保证cancel()始终有效?
没有。至少不符合我的经验。我想我甚至不得不处理那些只是抛出UnsupportedOperationException的驱动程序
是否保证cancel()不会阻止和(或多或少)立即返回
没有。根据正在执行的语句,有时cancel()可能会等到返回查询的第一行。这又高度依赖于驾驶员。
答案 1 :(得分:2)
来自同一个javadoc:
如果DBMS和驱动程序都支持中止SQL语句
这限制了保证。另一个限制是Statement.cancel()
由具体的驱动程序实现,换句话说,实现不是Java RE的一部分。
因此,取消 应该是线程安全的,但是您必须向供应商询问您的实际驱动程序/ DBMS。