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,则通常首选它,因为它是前进的方向,但如果您现在不想切换,您可以进行第二次更改。

于 2012-07-07T17:01:48.683 回答
1

我在这里只看到两个可能的问题。

  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 回答