2013-03-12 5 views
2

У меня возникли трудности с созданием семейства столбцов (таблицы) в 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+). 

Примечание: в этом случае кластер и пространство ключей являются правильными.

ответ

3

Ошибка при использовании баночки 1.2.1 заключается в том, что у вас есть старая версия банды cassandra-thrift. Вам нужно сохранить это в синхронизации с версией cassandra-jdbc. Баннер cassandra-thrift находится в каталоге lib бинарной загрузки.

+0

Блестящий - спасибо. Я добавил банку 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

Смежные вопросы