gpt4 book ai didi

java - 作为 CQL 的简单语句

转载 作者:行者123 更新时间:2023-12-04 15:05:29 24 4
gpt4 key购买 nike

我正在尝试将 SimpleStatement 转换为 CQL。

RegularInsert regularStatement = ...;

Map<String, Object> namedValues = new HashMap<>();
namedValues.put("a", "Hello");
namedValues.put("b", 1);

SimpleStatement statement = regularStatement.build(namedValues);

System.out.println(statement.getQuery());
System.out.println(statement.getNamedValues()); // Map<CqlIdentifier, Object>

返回:

INSERT INTO keyspace.table (a,b) VALUES (?,?)
{a=Hello, b=1}

很好,但我需要最终的 CQL 查询:

INSERT INTO keyspace.table (a,b) VALUES ('Hello',1)

我首先尝试将命名值绑定(bind)到 RegularInsert,我可以使用它通过 asCql() 获取 CQL 原始字符串,然后构建一个 SimpleStatement 。但它没有像我预期的那样工作:

RegularInsert regularStatement = statementInsertWithKeyspace(database.getDatabaseName());

// Transform <String> to literal <Term>
Map<String, Term> literalNamedValues = namedValues.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, e -> literal(e.getValue())));

regularStatement = regularStatement.values(literalNamedValues);

System.out.println(regularStatement.asCql());

SimpleStatement statement = regularStatement.values(literalNamedValues).build();

System.out.println(statement.getQuery());
System.out.println(statement.getNamedValues()); // Map<CqlIdentifier, Object>

返回:

INSERT INTO keyspace.table (a,b) VALUES ('Hello',1)
INSERT INTO keyspace.table (a,b) VALUES ('Hello',1)
{}

如何从 SimpleStatement 获取原始 CQL,同时保留 CQL 模板(没有值)?

谢谢。

最佳答案

深入研究,似乎一个声明不包含绑定(bind)值和模板。值来自 ImmutableMap,这意味着,一旦您 build() 查询或设置 values(),“?”不可撤销地被实际值取代。因此,如果您“同时”需要两者,那么您最好的选择似乎是使用两个语句对象,一个绑定(bind),一个未绑定(bind)。

RegularInsert regularStatement = ...;

Map<String, Object> namedValues = new HashMap<>();
namedValues.put("a", "Hello");
namedValues.put("b", 1);

// both build() and values() create new Objects
SimpleStatement statement = regularStatement.build(namedValues);
String boundStatement = regularStatement.values(namedValues).asCql();

System.out.println(statement.getQuery());
System.out.println(statement.getNamedValues()); // Map<CqlIdentifier, Object>
System.out.println(boundStatement);

关于java - 作为 CQL 的简单语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66247617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com