如何停止正在进行的java.sql.statement.executeQuery()?
我正在使用最新的德比10.11.1.1。 这样做:如何停止正在进行的java.sql.statement.executeQuery()?,java,database,jdbc,derby,Java,Database,Jdbc,Derby,我正在使用最新的德比10.11.1.1。 这样做: DriverManager.registerDriver(new org.apache.derby.jdbc.EmbeddedDriver()) java.sql.Connection connection = DriverManager.getConnection("jdbc:derby:filePath", ...) Statement stmt = connection.createStatement(); stmt.setQueryTi
DriverManager.registerDriver(new org.apache.derby.jdbc.EmbeddedDriver())
java.sql.Connection connection = DriverManager.getConnection("jdbc:derby:filePath", ...)
Statement stmt = connection.createStatement();
stmt.setQueryTimeout(2); // shall stop query after 2 seconds but id does nothing
stmt.executeQuery(strSql);
stmt.cancel(); // this in fact would run in other thread
我得到异常“java.sql.SQLFeatureNotSupportedException:原因:错误0A000:未实现功能:取消”
你知道有没有办法让它工作吗?或者它真的没有在Derby中实现,我需要使用不同的嵌入式数据库?关于一些免费数据库的任何提示,我可以使用它来代替derby,它支持SQL超时吗?正如我在java文档中得到的那样
void cancel()抛出SQLException如果DBMS和驱动程序都支持中止SQL语句,则取消此语句对象。一个线程可以使用此方法取消另一个线程正在执行的语句 它会抛出
SQLFeatureNotSupportedException
-如果JDBC驱动程序不支持此方法
您可以使用mysql
。
有太多的嵌入式数据库可用,你可以通过
如果未实现
功能:取消
,则确定不支持取消
从外观上看,它支持两种超时查询的方法,一种是通过JDBC API,另一种是通过JDBC URL上的设置。事实上,我发现derby中存在死锁超时,默认情况下,死锁超时也只设为60秒,我从来没有耐心达到它:) 因此,正确的答案是:
stmt.setQueryTimeout(2)代码>确实似乎不起作用
stmt.cancel()代码>似乎真的没有实现
但幸运的是,数据库管理器中存在超时。它被设置为60秒。看
可以使用以下命令更改时间:
statement.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(" +
"'derby.locks.waitTimeout', '5')");
它可以工作:)请显示您的实际代码,而不是“类似”代码。如果没有完整的上下文,很难诊断问题。有关其他详细信息,请阅读“”。h2支持查询超时:@DougR。我的实际代码有点长。你遗漏了什么信息?恐怕Derby根本不支持cancel()。我发现服务器不支持写在哪里的cancel()。
所以剩下的问题是如何在没有cancel()的情况下解除锁定derby查询,或者使用什么可以被cancel()的嵌入式数据库。因此,如果它没有违反任何保密协议,请发布您的实际代码,或者是导致错误的。看来mysql需要单独安装mysql服务器。似乎没有免费的嵌入式mysql。我说得对吗?我的目标是拥有一个包含DB本身的jar。是的,您需要安装mysql服务器,然后您需要与wikipedia中不同的数据库,但他们没有说是否支持cancel():(.顺便问一下,除了cancel()之外还有其他方法吗?)
杀死死锁的事务?或者,当这种情况发生时,我注定要永远关闭整个应用程序?正如nathan tolds h2所支持的那样。你可以这样做。是的,在h2中,表锁超时是默认的,并且可以通过语句进行更改。执行(“设置锁超时5000”);