Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 作为CQL的简单陈述_Java_Cassandra_Cql_Datastax Java Driver - Fatal编程技术网

Java 作为CQL的简单陈述

Java 作为CQL的简单陈述,java,cassandra,cql,datastax-java-driver,Java,Cassandra,Cql,Datastax Java Driver,我正在尝试将SimpleStatement转换为CQL regularsert regularStatement=。。。; Map namedValues=newhashmap(); namedValues.put(“a”,“Hello”); 名称值。放置(“b”,1); SimpleStatement语句=regularStatement.build(namedValues); System.out.println(statement.getQuery()); System.out.print

我正在尝试将
SimpleStatement
转换为CQL

regularsert regularStatement=。。。;
Map namedValues=newhashmap();
namedValues.put(“a”,“Hello”);
名称值。放置(“b”,1);
SimpleStatement语句=regularStatement.build(namedValues);
System.out.println(statement.getQuery());
System.out.println(statement.getNamedValues());//地图
返回:

INSERT INTO keyspace.table (a,b) VALUES (?,?)
{a=Hello, b=1}
INSERT INTO keyspace.table (a,b) VALUES ('Hello',1)
INSERT INTO keyspace.table (a,b) VALUES ('Hello',1)
{}
这很好,但我也需要最终的CQL查询:

INSERT INTO keyspace.table (a,b) VALUES ('Hello',1)
我首先尝试将命名值绑定到
regularnsert
,我可以使用
asql()
获取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>
如何从
SimpleStatement
获取原始CQL,同时保留CQL模板(无值)


谢谢。

深入分析,一条语句似乎不包含绑定值和模板。这些值来自一个不可变映射,这意味着,一旦您
build()
查询或设置
Values()
,“?”将被实际值不可逆转地替换。因此,如果您“同时”需要这两个对象,那么您的最佳选择似乎是使用两个语句对象,一个绑定对象和一个未绑定对象

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);
regularsert regularStatement=。。。;
Map namedValues=newhashmap();
namedValues.put(“a”,“Hello”);
名称值。放置(“b”,1);
//build()和values()都可以创建新对象
SimpleStatement语句=regularStatement.build(namedValues);
String boundStatement=regularStatement.values(namedValues.asql();
System.out.println(statement.getQuery());
System.out.println(statement.getNamedValues());//地图
System.out.println(boundStatement);