首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SimpleStatement为CQL

SimpleStatement为CQL
EN

Stack Overflow用户
提问于 2021-02-17 18:10:21
回答 1查看 406关注 0票数 3

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

代码语言:javascript
复制
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>

返回:

代码语言:javascript
复制
INSERT INTO keyspace.table (a,b) VALUES (?,?)
{a=Hello, b=1}

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

代码语言:javascript
复制
INSERT INTO keyspace.table (a,b) VALUES ('Hello',1)

我尝试先将命名的值绑定到RegularInsert,然后用asCql()获取CQL原始字符串,然后构建SimpleStatement。但它并没有像我预期的那样起作用:

代码语言:javascript
复制
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>

返回:

代码语言:javascript
复制
INSERT INTO keyspace.table (a,b) VALUES ('Hello',1)
INSERT INTO keyspace.table (a,b) VALUES ('Hello',1)
{}

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

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-23 10:54:09

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

代码语言:javascript
复制
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);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66247617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档