java - 在cql中创建列族?

标签 java jdbc cassandra cql

当我使用 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

最佳答案

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

关于java - 在cql中创建列族?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11374895/

相关文章:

java - 在android java中访问方法的问题

linux - 如何将 Cassandra 快照恢复到较小的集群中

python - 在pycassa中使用column_validators

java - 如何区分属性文件中的属性

java - 为什么 IntentReceiverLeaked?

java - 如何设置连接属性?

java - 由 : java.net.NoRouteToHostException: No route to host 引起

java - 无法连接到数据库,帮我理解这个错误列表吗?

cassandra - 在 Cassandra 上如何启用 LDAP 身份验证

java - 默认 java util 二进制搜索返回错误结果