在cql中创建列族?
问题描述:
当我使用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,
);
CQL 3是被普遍首选,如果你的卡珊德拉支持它,因为它是前进的道路,但如果你不想转,现在,你就可以说第二个变化。
答
我只有在这里看到两个可能的问题。
-
查询不接受你的定义主键
的方式试试这个:
String qry = "CREATE TABLE users(user_name varchar PRIMARY KEY," + "password varchar," + "gender varchar," + "session_token varchar," + "birth_year bigint" ")";
-
查询不接受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-09 05:02:21
很高兴听到它!如果您“接受”答案,它会有所帮助。 – 2012-07-09 14:48:55