java - Cassandra:如何将PreparedStatement绑定(bind)到 map 数据

标签 java cassandra cql nosql

假设我在 Cassandra 中有一个表,其中有一个名为 map<int, text> 的 map 字段 ( map1 ) 。我想执行这个语句: SELECT * from TABLE1 WHERE map1 = ? 创建 PreparedStatement 的实例后,我需要调用bind其有效值为 ?占位符。我怎样才能做到这一点?

这是我不完整的代码: PreparedStatement stmt = session.prepare("SELECT * from TABLE1 WHERE map1 = ?"); session.execute(stmt.bind(?));

附注假设我已启用“允许过滤”

最佳答案

绑定(bind)标记 ?是一个位置占位符,位置从零开始,因此第一个绑定(bind)标记获取索引 0等等。您可以通过两种方式为此占位符绑定(bind)值:

  1. 使用 BoundStatement.setMap(int, Map)方法:

    BoundStatement bs = stmt.bind();
    Map<Integer, String> map1 =...
    bs.setMap(0, map1); // 0 is the zere-based index of your bindmarker
    
  2. 使用 PreparedStatement.bind(Object...)方法,本质上是上面代码的简写;每个参数必须对应于查询中的位置绑定(bind)标记:

    Map<Integer, String> map1 =...
    BoundStatement bs = stmt.bind(map1);
    

最后,因为您的列的类型为 map<int,text> ,驱动程序在 Java 中自然地将其映射为 Map<Integer, String> 。这就是为什么您应该使用 setMap() BoundStatement中的方法.

关于java - Cassandra:如何将PreparedStatement绑定(bind)到 map 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37690709/

相关文章:

java - BufferStrategy 和 Swing 结合起来?

java - 如何从包含重复值的多个列表中创建唯一数据列表

java - MultiMap 与 MultiValueMap

java - springboot + hibernate + javaFX

cassandra - 错误请求 : line 1:115 mismatched input ';' expecting K_VALUES in cassandra

unix - Cassandra 端口问题

java - Cassandra 中的范围查询

java - cassandra 3.5 无法加载触发器类

cassandra - 如何获取 cql 查询的墓碑计数?

mysql - 如何设计用户操作日志的Cassandra方案?