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



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

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

附言假设我启用了"允许过滤"

绑定

标记?是一个位置占位符,位置从零开始,因此第一个绑定标记获取索引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() 方法。

最新更新