Cassandra:如何将 PreparedStatement 绑定到地图数据
Cassandra: How to bind PreparedStatement to a map data
假设我在 Cassandra 中有一个 table,它有一个名为 map1
的映射字段 (map<int, text>
)。我想执行这个声明:
SELECT * from TABLE1 WHERE map1 = ?
创建 PreparedStatement
的实例后,我需要使用 ?
占位符的有效值对其调用 bind
。我该怎么做?
这是我的不完整代码:
PreparedStatement stmt = session.prepare("SELECT * from TABLE1 WHERE map1 = ?");
session.execute(stmt.bind(?));
P.S。假设我启用了 "ALLOW FILTERING"
绑定标记 ?
是一个 位置占位符 ,位置是从零开始的,所以第一个绑定标记获得索引 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()
方法
假设我在 Cassandra 中有一个 table,它有一个名为 map1
的映射字段 (map<int, text>
)。我想执行这个声明:
SELECT * from TABLE1 WHERE map1 = ?
创建 PreparedStatement
的实例后,我需要使用 ?
占位符的有效值对其调用 bind
。我该怎么做?
这是我的不完整代码:
PreparedStatement stmt = session.prepare("SELECT * from TABLE1 WHERE map1 = ?");
session.execute(stmt.bind(?));
P.S。假设我启用了 "ALLOW FILTERING"
绑定标记 ?
是一个 位置占位符 ,位置是从零开始的,所以第一个绑定标记获得索引 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()
方法