【问题标题】:creating column family in cql?在cql中创建列族?
【发布时间】:2012-07-07 15:52:52
【问题描述】:

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

【问题讨论】:

    标签: java jdbc cassandra cql


    【解决方案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)" +
                                          ")";
      

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2015-09-27
        • 2013-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-26
        • 1970-01-01
        • 2012-03-24
        • 1970-01-01
        相关资源
        最近更新 更多