2014-12-11 6 views
9

Ich versuche, die Anzahl der Schlüsselwertpaare in einer Cassandra-Spaltenfamilie zu erhalten. Nachstehend ist der Code, den ich verwendet habe.Erhalte ein BigInteger-Attribut von 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)); 

Aber wenn ich diesen Code ausgeführt habe, bekomme ich folgende Ausnahme.

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) 

Nach DataStax Dokumentation (http://www.datastax.com/drivers/java/2.0/com/datastax/driver/core/Row.html) getVarint sollte eine BigInteger zurück. Warum bekomme ich hier eine Ausnahme? Was mache ich falsch?

Antwort

8

Wie angegeben here, können Sie Wert als lang, stattdessen erhalten.

Ich konnte es nicht testen, aber könnten Sie versuchen, diese:

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

ja, es hat auch für mich funktioniert, danke. –

0

Folgendes funktioniert. Ich bin mir nicht sicher, warum es funktioniert.

row.getLong(0) 
+0

Es funktioniert, weil die Aggregatfunktion count (*) tatsächlich einen int zurückgibt (die in Java Bedingungen eine lange) kein VarInt (die wäre ein BigInteger in Java). Offenbar können Sie nicht mehr als 2^63 Zeilen in einer Tabelle haben, aber das sollte reichen. – sme