2014-12-11 4 views
9

카산드라 열 패밀리에서 키 값 쌍 수를 얻으려고합니다. 다음은 내가 사용한 코드입니다.Cassandra ResultSet에서 BigInteger 특성 가져 오기

PreparedStatement statement = client.session 
      .prepare("select count(*) from corpus.word_usage"); 
ResultSet results = client.session.execute(statement.bind()); 
Row row = results.one(); 
System.out.println(row.getVarint(0)); 

하지만이 코드를 실행하면 다음 예외가 발생합니다.

Exception in thread "main" com.datastax.driver.core.exceptions.InvalidTypeException: Column count is of type bigint 
    at com.datastax.driver.core.ColumnDefinitions.checkType(ColumnDefinitions.java:291) 
    at com.datastax.driver.core.ArrayBackedRow.getVarint(ArrayBackedRow.java:185) 
    at SimpleClient.main(SimpleClient.java:57) 

는 datastax 문서에 따르면 (http://www.datastax.com/drivers/java/2.0/com/datastax/driver/core/Row.html) getVarint는 BigInteger를 반환해야합니다. 그렇다면 왜 내가 여기서 예외를 얻고 있습니까? 내가 뭘 잘못 했니?

답변

8

지정된대로 here과 같이 값을 길게 얻을 수 있습니다.

나는 그것을 테스트 할 수 있지만, 당신은 시도 할 수이 :

PreparedStatement statement = client.session.prepare("select count(*) from corpus.word_usage"); 
ResultSet results = client.session.execute(statement.bind()); 
Row row = results.one(); 
long expected = row.getLong("count"); 
+0

네, 저에게도 효과가있었습니다, 감사합니다. –

0

다음 작업을 수행하십시오. 왜 그것이 작동하는지 모르겠습니다.

row.getLong(0) 
+0

집계 함수 카운트 (*)는 실제로 (자바 측면에서 긴) int 형이 아닌 varint을 반환하기 때문에 의미가 있습니다 (이 자바에서 BigInteger가 될 것입니다). Apparently 당신은 테이블에 2^63 개 이상의 행을 가질 수는 없지만 충분해야합니다. – sme

관련 문제