假设我在 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)值:
使用
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...)
方法,本质上是上面代码的简写;每个参数必须对应于查询中的位置绑定(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/