2

cassandra-jdbcドライバーを介してcassandraで列ファミリー(テーブル)を作成するのに問題があります。

cqlコマンドはcqlshで正しく機能しますが、cassandrajdbcを使用している場合は機能しません。これは、接続文字列を定義した方法と関係があると思います。どんな助けでも大いに役立つでしょう。

私がやったことを説明してみましょう。

次のコマンドで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
    );

これは正しく機能します。

cassandra-jdbc-1.2.1.jarを使用してテーブルを作成しようとすると、問題が発生します。

私が使用するコードは次のとおりです。

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();
    }

cassandra-jdbc-1.2.1.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)

注:クラスターとキースペースは正しくありません

cassandra-jdbc-1.1.2.jarを使用すると、次のエラーが発生します。

    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+).

注:この場合、クラスターとキースペースは正しいように見えます。

4

1 に答える 1

3

1.2.1 jar を使用する際のエラーは、古いバージョンの cassandra-thrift jar があるためです。それを cassandra-jdbc バージョンと同期させる必要があります。cassandra-thrift jar は、バイナリ ダウンロードの lib ディレクトリにあります。

于 2013-03-13T07:39:02.550 に答える