Cassandra:如何将 PreparedStatement 绑定到地图数据

Cassandra: How to bind PreparedStatement to a map data

假设我在 Cassandra 中有一个 table,它有一个名为 map1 的映射字段 (map<int, text>)。我想执行这个声明: SELECT * from TABLE1 WHERE map1 = ? 创建 PreparedStatement 的实例后,我需要使用 ? 占位符的有效值对其调用 bind。我该怎么做?

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

P.S。假设我启用了 "ALLOW FILTERING"

绑定标记 ? 是一个 位置占位符 ,位置是从零开始的,所以第一个绑定标记获得索引 0 等等。您可以通过两种方式为该占位符绑定一个值:

  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...)方法,本质上是上面代码的简写;每个参数必须对应于查询中的位置绑定标记:

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

最后,因为您的列是 map<int,text> 类型,驱动程序自然会将其映射到 Java 到 Map<Integer, String>。这就是为什么你应该在 BoundStatement.

中使用 setMap() 方法