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

时间:2016-06-07 22:54:11

标签: java cassandra cql nosql

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

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

P.S。假设我已启用&#34;允许过滤&#34;

1 个答案:

答案 0 :(得分:1)

绑定标记?位置占位符,位置从零开始,因此第一个绑定标记获取索引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);
    
  3. 最后,因为您的列的类型为map<int,text>,所以驱动程序自然会将它以Java格式映射到Map<Integer, String>。这就是为什么你应该使用setMap()中的BoundStatement方法。