java - Cassandra 3.4 Java LIKE 运算符

标签 java cassandra datastax datastax-java-driver

Cassandra 3.4 现在通过自定义索引提供 LIKE 运算符。

它在我的测试示例中使用 cqlsh 和诸如 SELECT * FROM table WHERE indexed_column LIKE '%VALU%' 之类的东西运行良好。我已经建立了一个索引,并且一切正常。

如何在具有动态值的 Java 驱动程序(我使用的是 3.0.2 版)中执行此操作?我的查询使用 QueryBuilder 并在使用像这样的文字值时使用 PreparedStatements(PS 示例,但 QueryBuilder 也适用于文字值):

PreparedStatement ps = PreparedStatement("SELECT * FROM table WHERE indexed_column LIKE '%VALU%'");

但如果我想使用 ?在 QueryBuilder 或使用 PreparedStatements 中绑定(bind)一个值(例如绑定(bind)“%VAL%”)。例如

PreparedStatement ps = PreparedStatement("SELECT * FROM table WHERE indexed_column LIKE ?");
BoundStatement boundStatement = new BoundStatement(ps);
cassandraSession.execute(boundStatement.bind('%VAL%');

我收到以下错误:

com.datastax.driver.core.exceptions.SyntaxError: line 1:53 mismatched input '?' expecting STRING_LITERAL (...test.table WHERE indexed_column LIKE [?];)

最佳答案

这是 3.4 中的一个错误,在 C* 3.6 中已通过 CASSANDRA-11456 修复,因为您无法为 LIKE 运算符上的值提供绑定(bind)标记 (?)。如果您升级到 Cassandra 3.6,这应该可以工作。

关于java - Cassandra 3.4 Java LIKE 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38132679/

相关文章:

java - Log4J SQL 日志记录 TopLink

cassandra - 在 cassandra 中使用 replication_factor

node.js - 将 docker 容器上托管的 cassandra 与 nodejs 连接时出现 NoHostAvailableError : No host could be resolved

java - cassandra 大量写入有时会默默地失败

java - cassandra datastax 写入生成的代码时出现意外错误 : java. lang.NullPointerException

java - Android:使用带有动态 url 的 Retrofit

java - Hadoop 数据从两个文件加入 - 如何强制映射器读取特定文件

Java 骰子模拟

python - 如果 cassandra 中不存在列,如何更改表添加列?

cassandra - 如何在cassandra中将环与簇分开