java 中的集合表示与 CQL

Representation of Set in java versus CQL

我是 cassandra 的新手,我尝试向 table 添加一组数据。我的 table 看起来像:

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

我遇到的问题是当我提出请求时类型不兼容,Java 中集合的字符串表示是 [uuid1,uuid2,...] 而 cql 中的表示是{'uuid1','uuid2',...}

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

如果有函数或库可以直接解决这个问题,你们知道吗?非常感谢。

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

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

然后驱动程序会负责为您正确注入 Set。您也可以考虑使用 BoundStatement or QueryBuilder 来完成此操作。

我还建议您也使用准备好的语句。除了其他原因,C* 还做了很多工作,如果它是 p_stmnt,它将为任何查询缓存,使您下次发出它们时更快。不使用 p_stmnts 将使 c* 一遍又一遍地重复该工作,而不是使用缓存。