【问题标题】:Close ResultSet and Statement resources (datastax, no close() method)关闭 ResultSet 和 Statement 资源(datastax,没有 close() 方法)
【发布时间】:2015-12-25 12:16:51
【问题描述】:

你好世界!

我在尝试关闭一些 datastax 资源(语句、结果集)时遇到了麻烦。 在我使用这些资源后,Sonar 对我大吼大叫。

(关于我使用这个 myMethod() 后的信息,我调用了一个 System.exit(0))无论如何,我想根据声纳来做

session.close() 是不够的,因为它似乎让 Statement 和 ResultSet。

/!\ ResultSet 和 Statement 来自 com.datastax.com.driver 并且这些 close() 方法在它们上不存在。 (不同于 java.sql)

我认为 session.getCluster.close() 可以,但我不想关闭集群。

正确关闭这些资源的正确方法是什么?

import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;
import com.datastax.driver.core.Session;
import com.datastax.driver.core.Statement;
public void myMethod() {

    Statement statement = session.prepare("select * from .....").bind();
    ResultSet rs = session.execute(statement);

    // doSomethingWithThisResultSet() ...

    session.close();
}

提前感谢您的帮助!

【问题讨论】:

    标签: java sonarqube datastax datastax-java-driver


    【解决方案1】:

    ResultSet 没有“链接”到需要关闭的连接或任何其他资源。它由一个数组支持。见:https://github.com/datastax/java-driver/blob/2.1/driver-core/src/main/java/com/datastax/driver/core/ArrayBackedResultSet.java

    学分:https://groups.google.com/a/lists.datastax.com/forum/#!topic/java-driver-user/yjDP1xeYyYM

    语句只包含语句ID,所以你也不需要关闭它。

    【讨论】:

    • 谢谢vovka,我一定错过了这个答案,不知道为什么。无论如何,现在我有我的结果了。 (对于那些怀疑原始答案来自 datastax 产品经理的人,我可能会添加,请参阅链接)
    • 这是否意味着整个结果集被拉入内存?
    • 编辑:从头开始。它似乎在做分页。我的问题是:如果我执行一个查询,然后从不对结果集做任何事情,那么结果集什么时候“过期”(由 cassandra 服务器或客户端)。
    猜你喜欢
    • 2014-05-05
    • 1970-01-01
    • 2010-11-05
    • 2011-08-01
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多