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