gpt4 book ai didi

oracle - 杀死从 Oracle DB 填充 Java ResultSet 对象的线程的最佳方法

转载 作者:行者123 更新时间:2023-12-04 04:48:26 36 4
gpt4 key购买 nike

我有一个后台线程通过 Select 语句查询 Oracle 数据库。该语句正在填充一个 ResultSet Java 对象。如果查询返回很多行,则 ResultSet 对象可能会变得非常大。如果它太大,我想同时取消后台线程,但更重要的是我想取消正在创建 ResultSet 对象并占用大量 Java 内存的线程。

从我目前在网上阅读的内容来看,java.sql.Statement cancel() ,似乎是完成这项工作的最佳方式,有人可以确认吗?有更好的方法吗?
java.sql.Statement close()也有效,我可能会捕获 ExhaustedResultset 异常,但这可能不安全。

澄清一下,我不想要 ResultSet 或线程 - 我想从内存中完全丢弃它们。

最佳答案

这取决于 JDBC 实现:Statement.cancel() 是对 JDBC 驱动程序类的请求,它可能会或可能不会执行您需要或期望的操作。

但是,当您执行选择(通常是非事务性的)并看到 JDBC 的默认行 Prefetch 属性为 10 时,这应该可以解决问题。有关类似/相关信息,请参阅此答案:

When I call PreparedStatement.cancel() in a JDBC application, does it actually kill it in an Oracle database?

关于oracle - 杀死从 Oracle DB 填充 Java ResultSet 对象的线程的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17811944/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com