2014-12-11 1 views
9

Я пытаюсь получить число пар ключей в семействе столбцов Cassandra. Ниже приведен код, который я использовал.Получить атрибут BigInteger из Cassandra ResultSet

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 (который является долго в Java плане) а не varint (который будет BigInteger в Java). Очевидно, вы не можете иметь более 2^63 строк в таблице, но этого должно быть достаточно. – sme