2015-09-28 53 views
2

Hello World!

我試圖關閉一些datastax資源(Statement,ResultSet)時遇到了麻煩。 Sonar在我使用它們後大吼我,關閉這些資源。關閉ResultSet和Statement資源(datastax,無close()方法)

(信息後,我用這個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(); 
} 

在此先感謝您的幫助!

回答

7

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,這樣你就不會需要關閉它。

+0

謝謝你vovka,我一定錯過了這個答案,不知道爲什麼。無論如何,現在我有我的結果。 (對於那些懷疑原始答案來自datastax產品經理的人,請參閱鏈接) – Fundhor

+0

這是否意味着整個結果集都被拉入內存? –

+3

編輯:從頭開始。它似乎做分頁。我的問題是:如果我執行一個查詢,然後從不對結果集做任何事情,結果集何時「過期」(由cassandra服務器或客戶端)。 –