Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以使用iBATIS中止长时间运行的查询?_Java_Sql_Ibatis - Fatal编程技术网

Java 是否可以使用iBATIS中止长时间运行的查询?

Java 是否可以使用iBATIS中止长时间运行的查询?,java,sql,ibatis,Java,Sql,Ibatis,我有一个GUI,允许用户运行长时间运行的查询。有时,用户会后悔运行这些查询,并希望取消它们。查询是使用iBATIS对Oracle数据库运行的,我知道java.sql.Statement接口定义了一个cancel方法,该方法可能由驱动程序实现,也可能不由驱动程序实现。因此,我的问题是,是否可以使用iBATIS调用此方法来取消查询(给定正确的驱动程序),或者是否有其他方法中止正在进行的长时间运行的查询。好的, 我想,一旦服务器进入数据库服务器,取消它实际上是一个“特定于数据库供应商”的问题 如果您的

我有一个GUI,允许用户运行长时间运行的查询。有时,用户会后悔运行这些查询,并希望取消它们。查询是使用iBATIS对Oracle数据库运行的,我知道java.sql.Statement接口定义了一个cancel方法,该方法可能由驱动程序实现,也可能不由驱动程序实现。因此,我的问题是,是否可以使用iBATIS调用此方法来取消查询(给定正确的驱动程序),或者是否有其他方法中止正在进行的长时间运行的查询。

好的,
我想,一旦服务器进入数据库服务器,取消它实际上是一个“特定于数据库供应商”的问题
如果您的要求是取消查询,
当涉及到您的应用程序时
(即,如果它到达Oracle DB服务器,并且在那里运行,您就可以了,只要您不会得到结果),请考虑使用具有取消方法的接口。BR> 您可以使用一个“Callable”来运行查询,它将返回一个类型正确的对象,该对象是一个实现
如果需要中止-只需使用future对象的“cancel”方法。
您还可以使用“isCanceled”检查提交是否被取消,并在代码中进行适当处理

我相信iBATIS不支持这一点,是吗?这是纯java SE代码。使用Callables包装iBATIS调用,并使用ExecutorService调用。我们以这种方式取消对ldap服务器的查询(即,它们可能在ldap服务器上被调用,我们以这种方式忽略结果),这听起来非常有趣。你们有什么可以看的代码示例吗?不是iBatis,但一般来说——我是oVirt开源项目引擎核心部分的维护人员。访问我们的网站www.ovirt.org,git克隆“引擎”部分。您可以找到ThreadPoolUtil.java there—您将看到我们将其与invokeAny一起使用,并返回Future,然后您将能够在代码中找到一个带有cancel()方法的示例。