1

cql を使用して列ファミリーを作成すると、非常に予期しない出力が得られます。

public static void createColumnfamily()
    {
        try
        {
            Class.forName("org.apache.cassandra.cql.jdbc.CassandraDriver");
            Connection con = DriverManager.getConnection("jdbc:cassandra://192.168.1.32:9160/temp");
            String qry = "CREATE TABLE users(user_name varchar," +
                                            "password varchar," +
                                            "gender varchar," +
                                            "session_token varchar," +
                                            "birth_year bigint," +
                                            "PRIMARY KEY (user_name)" +
                                            ")";
            Statement smt = con.createStatement();
            smt.executeUpdate(qry);
            System.out.println("TABLE(column family) is created");
            con.close();
        }
        catch(Exception e)
        {
            System.out.println(" : " + e.getMessage());
        }

    }

ここで私が得たもの:1:132行目余分な入力 ')' EOFを期待

4

2 に答える 2

3

そのスタイルの主キー宣言をサポートしていない CQL 2 を使用しています。そのように宣言する場合は、CQL 3 を使用する必要があります。これは、接続 URL でそのバージョンを要求することで実現できます。

DriverManager.getConnection("jdbc:cassandra://192.168.1.32:9160/temp?version=3.0.0");

ただし、これだけのために CQL 3 は必要ありません。Steve Van Opstal が示唆しPRIMARY KEYたように、マルチコンポーネントの主キーがないため、列定義自体にマーカーを配置するだけで済みます。

CREATE TABLE users(
    user_name varchar PRIMARY KEY,
    password varchar,
    gender varchar,
    session_token varchar,
    birth_year bigint,
);

Cassandra がサポートしている場合は CQL 3 が一般的に優先されますが、これは今後の方法ですが、今すぐ切り替えたくない場合は、その 2 番目の変更を行うことができます。

于 2012-07-07T17:01:48.683 に答える
1

ここで考えられる問題は 2 つだけです。

  1. クエリは、主キーを定義する方法を受け入れません

    これを試して:

        String qry = "CREATE TABLE users(user_name varchar PRIMARY KEY," +
                                        "password varchar," +
                                        "gender varchar," +
                                        "session_token varchar," +
                                        "birth_year bigint"
                                        ")";
    
  2. クエリは varchar を主キーとして受け入れません

    これを試して:

        String qry = "CREATE TABLE users(user_id int" +
                                        "user_name varchar," +
                                        "password varchar," +
                                        "gender varchar," +
                                        "session_token varchar," +
                                        "birth_year bigint," +
                                        "PRIMARY KEY (user_id)" +
                                        ")";
    
于 2012-07-07T12:36:31.610 に答える