在Java与CQL中表示Set

时间:2015-04-22 23:01:37

标签: java cassandra cql

我是cassandra的新手,我尝试将一组数据添加到表中。我的表看起来像:

CREATE TABLE myTable (id int, name varchar, mySet set<uuid>, PRIMARY KEY (id));

我遇到的问题是当我做我的请求时类型不兼容,Java中的集合的字符串表示是[uuid1,uuid2,...]并且cql中的表示是{&#39; uuid1& #39;,&#39; UUID2&#39;,...}

session.execute("INSERT INTO myTable (id , name, mySet) VALUES (" + myID + ", '" + myName +"' ," + mySet + ");");

所以你知道有没有函数或库可以直接解决这个问题。非常感谢。

2 个答案:

答案 0 :(得分:5)

不是将设置内容附加到查询字符串(使用set .toString()实现),而是执行以下操作(需要cassandra 2.0+):

session.execute("INSERT INTO myTable (id, name, mySet) VALUES (?, ?, ?));", myId, myName, mySet);

然后,驱动程序将为您正确注入Set。您也可以考虑使用BoundStatementQueryBuilder来完成此操作。

答案 1 :(得分:3)

我还建议你也使用预备语句。除了其他原因之外,如果它是p_stmnt,C *会为任何查询执行一系列工作,在下次发布它们时会更快。不使用p_stmnts将使c *重复一遍又一遍地工作,而不是使用缓存。