>假设我在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
依此类推。可以通过两种方式绑定此占位符的值:
使用
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
使用
PreparedStatement.bind(Object...)
方法,该方法本质上是上述代码的简写;每个参数必须对应于查询中的位置绑定标记:Map<Integer, String> map1 =... BoundStatement bs = stmt.bind(map1);
最后,由于您的列是 map<int,text>
类型,驱动程序自然地将其在 Java 中映射到 Map<Integer, String>
。这就是为什么您应该在 BoundStatement
中使用 setMap()
方法。