У меня возникли трудности с созданием семейства столбцов (таблицы) в cassandra через драйвер cassandra-jdbc.Ошибки при создании таблицы с использованием cassandra-jdbc-1.2.1 jar
Команда cql корректно работает в cqlsh, но не использует cassandra jdbc. Я подозреваю, что это связано с тем, как я определил строку подключения. Любая помощь будет очень полезна.
Позвольте мне попытаться объяснить, что я сделал.
Я создал пространство ключей с помощью cqlsh с помощью следующей команды
CREATE KEYSPACE authdb WITH
REPLICATION = {
'class' : 'SimpleStrategy',
'replication_factor' : 1
};
Это согласно документации по адресу: http://www.datastax.com/docs/1.2/cql_cli/cql/CREATE_KEYSPACE#cql-create-keyspace
Я могу создать таблицу (столбец семьи) в cqlsh с помощью
CREATE TABLE authdb.users(
user_name varchar PRIMARY KEY,
password varchar,
gender varchar,
session_token varchar,
birth_year bigint
);
Это работает правильно.
Мои проблемы начинаются, когда я пытаюсь создать таблицу с помощью Кассандры-1.2.1.jar JDBC
код я использую:
public static void createColumnFamily() {
try {
Class.forName("org.apache.cassandra.cql.jdbc.CassandraDriver");
Connection con = DriverManager.getConnection("jdbc:cassandra://localhost:9160/authdb?version=3.0.0");
String qry = "CREATE TABLE authdb.users(" +
"user_name varchar PRIMARY KEY," +
"password varchar," +
"gender varchar," +
"session_token varchar," +
"birth_year bigint" +
")";
Statement smt = con.createStatement();
smt.executeUpdate(qry);
con.close();
} catch (Exception e) {
e.printStackTrace();
}
При использовании Кассандры-1.2.1 JDBC .jar я получаю следующее сообщение об ошибке:
main DEBUG jdbc.CassandraDriver - Final Properties to Connection: {cqlVersion=3.0.0, portNumber=9160, databaseName=authdb, serverName=localhost}
main DEBUG jdbc.CassandraConnection - Connected to localhost:9160 in Cluster 'authdb' using Keyspace 'Test Cluster' and CQL version '3.0.0'
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.cassandra.thrift.Cassandra$Client.execute_cql3_query(Ljava/nio/ByteBuffer;Lorg/apache/cassandra/thrift/Compression;Lorg/apache/cassandra/thrift/ConsistencyLevel;)Lorg/apache/cassandra/thrift/CqlResult;
at org.apache.cassandra.cql.jdbc.CassandraConnection.execute(CassandraConnection.java:447)
Примечание: кластер и пространство ключей не являются правильными
При использовании Кассандры-1.1.2.jar JDBC Я получаю следующее сообщение об ошибке:
main DEBUG jdbc.CassandraDriver - Final Properties to Connection: {cqlVersion=3.0.0, portNumber=9160, databaseName=authdb, serverName=localhost}
main INFO jdbc.CassandraConnection - Connected to localhost:9160 using Keyspace authdb and CQL version 3.0.0
java.sql.SQLSyntaxErrorException: Cannot execute/prepare CQL2 statement since the CQL has been set to CQL3(This might mean your client hasn't been upgraded correctly to use the new CQL3 methods introduced in Cassandra 1.2+).
Примечание: в этом случае кластер и пространство ключей являются правильными.
Блестящий - спасибо. Я добавил банку cassandra-thrift, используя репозиторий maven по адресу http://mvnrepository.com/artifact/org.apache.cassandra/cassandra-thrift/. Я использую Cassandra 1.2.2, а версия cassandra-thrift - 1.2.2. Я использовал последний номер версии при объявлении зависимости от maven. \t org.apache.cassandra \t Cassandra-комиссионном \t 1.2.2 –
Mahesh