假设我在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;
答案 0 :(得分:1)
绑定标记?
是位置占位符,位置从零开始,因此第一个绑定标记获取索引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>
。这就是为什么你应该使用setMap()
中的BoundStatement
方法。