我正在使用datastax的Cassandra Java驱动程序。My Cassandra仅支持CQL 2。
我有一个准备好的INSERT语句,需要接受Map列表。
这是我的模式:
CREATE TYPE test.snap_guid (
l bigint,
h bigint
);
CREATE TABLE test.t (
id bigint,
snap list<frozen<snap_guid>>,
PRIMARY KEY ((id))
)
这是准备好的声明:
PreparedStatement mysttmt = <client>.prepare("INSERT INTO test.t (id, snap) VALUES (?, ?)");
我知道为了将集合绑定到准备好的语句,我需要创建一个集合,并将其绑定。我无法在准备好的查询中放置集合括号。例如(文本列表):
ArrayList<String> snaps = new ArrayList<>();
snaps.add("AEF34GF665");
// INSERT INTO test.t (id, snap) VALUES (?, ?)
BoundStatement bs = mysttmt.bind(12, snaps);
我的问题是:如何绑定Map列表?如何创建类似于下一个查询的查询?
INSERT INTO test.t (id, snap) VALUES (12, [{l:10,h:50}])
// I know it is impossible to create the following prepared statement:
INSERT INTO test.t (id, snap) VALUES (?, [{l:?,h:?}])
// The list of maps has to be a single bound variable... how???
INSERT INTO test.t (id, snap) VALUES (?, ?)
2条答案
按热度按时间c6ubokkw1#
1.创建表:
1.创建Map类和bean:
1.创建准备好的语句,例如:
1.绑定参数:
或
1.将具有
my_key
值的记录插入表中(可以直接在cql中执行此操作)。1.运行代码,现在我们可以通过使用UDT更新表来向集合添加/删除元素。
gkn4icbw2#
我有解决方案。
似乎这个问题是错的。我需要添加一个UDT列表(用户定义的tap),而不是散列列表。为此,您需要使用UserType和UDTValue: