Statement.cancel()及其线程安全保证

时间:2011-01-04 15:33:11

标签: java jdbc thread-safety prepared-statement specifications

不幸的是,jdbc规范对Statement.cancel()的保证保持沉默。

javadoc所述的唯一内容是Statement.cancel()thread-safe
但:

  • 是否保证cancel()始终有效?(以当前正在执行Statement的主题将立即取消阻止并继续执行的方式)
  • 是否保证cancel()不会阻止和(或多或少)立即返回?

2 个答案:

答案 0 :(得分:3)

  

是否保证cancel()始终有效?

没有。至少不符合我的经验。我想我甚至不得不处理那些只是抛出UnsupportedOperationException的驱动程序

  

是否保证cancel()不会阻止和(或多或少)立即返回

没有。根据正在执行的语句,有时cancel()可能会等到返回查询的第一行。这又高度依赖于驾驶员。

答案 1 :(得分:2)

来自同一个javadoc:

  

如果DBMS和驱动程序都支持中止SQL语句

这限制了保证。另一个限制是Statement.cancel()由具体的驱动程序实现,换句话说,实现不是Java RE的一部分。

因此,取消 应该是线程安全的,但是您必须向供应商询问您的实际驱动程序/ DBMS。