2012-07-07 140 views
1

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

回答

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, 
); 

CQL 3是被普遍首选,如果你的卡珊德拉支持它,因为它是前进的道路,但如果你不想转,现在,你就可以说第二个变化。

+0

感谢它帮助我很多概念上和实际上.. – 2012-07-09 05:02:21

+0

很高兴听到它!如果您“接受”答案,它会有所帮助。 – 2012-07-09 14:48:55

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)" + 
                ")";