When I call PreparedStatement.cancel() in a JDBC application, does it actually kill it in an Oracle database?(当我在 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.
这篇关于当我在 JDBC 应用程序中调用 PreparedStatement.cancel() 时,它是否真的在 Oracle 数据库中杀死了它?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:当我在 JDBC 应用程序中调用 PreparedStatement.cancel() 时,它是否真的在 Oracle 数据库中杀死了它?


- 如何将 SonarQube 6.7 从 MySQL 迁移到 postgresql 2022-01-01
- 以一个值为轴心,但将一行上的数据按另一行分组? 2022-01-01
- SQL 临时表问题 2022-01-01
- 在SQL中,如何为每个组选择前2行 2021-01-01
- 如何将 Byte[] 插入 SQL Server VARBINARY 列 2021-01-01
- 导入具有可变标题的 Excel 文件 2021-01-01
- 如何使用 pip 安装 Python MySQLdb 模块? 2021-01-01
- 远程 mySQL 连接抛出“无法使用旧的不安全身份验证连接到 MySQL 4.1+"来自 XAMPP 的错误 2022-01-01
- 更改自动增量起始编号? 2021-01-01
- 使用 Oracle PL/SQL developer 生成测试数据 2021-01-01