当我在 JDBC 应用程序中调用 PreparedStatement.cancel() 时,它是否真的在 Oracle 数据库中杀死了它?
我有针对 Oracle 10g 数据库运行的 Java JDBC 应用程序.我设置了一个 PreparedStatement 来执行查询,然后调用 ps.executeQuery() 来运行它.有时查询需要很长时间,我需要杀死它.我有另一个线程访问该 PreparedStatement 对象,并对其调用 cancel().
I have Java JDBC application running against an Oracle 10g Database. I set up a PreparedStatement to execute a query, and then call ps.executeQuery() to run it. Occasionally the query takes a long time, and I need to kill it. I have another thread access that PreparedStatement object, and call cancel() on it.
我的问题是,这真的会杀死数据库中的查询吗?或者它只是将它从客户端切断,而查询仍在 Oracle 内部的某个地方运行?
My question is, does this actually kill the query in the database? Or does it just sever it from the client, and the query is still running somewhere in the bowels of Oracle?
谢谢!
推荐答案
答案是这是一个实施质量问题.如果您查看 javadoc 对于 Statement.cancel(),它表示如果 DBMS 和驱动程序都支持中止 SQL 语句",就会发生这种情况.
The answer is that it's a quality-of-implementation issue. If you look at the javadoc for Statement.cancel(), it says it'll happen "if both the DBMS and driver support aborting an SQL statement".
根据我使用各种版本的 Oracle JDBC 驱动程序的经验,Statement.cancel() 似乎可以满足您的需求.查询在取消时似乎立即停止执行.
In my experience with various versions of Oracle JDBC drivers, Statement.cancel() seems to do what you'd want. The query seems to stop executing promptly when cancelled.
相关文章