Cassandra Java Driver BoundStatement.setList 也适用于 set
Cassandra Java Driver BoundStatement.setList works for set as well
我有一个 table 用户集
create table IF NOT EXISTS userset (id int primary key, name set, phone set, emails list);
现在我正在通过 datastax java 驱动程序执行插入语句:cassandra-driver-core-3.1.0.jar。现在我有一个 java.util.List 的字符串说 listString
List<String> listString = new ArrayList<String>();
listString.add("NewName");
boundStatement.setList(1, listString);
这里的boundStatement是com.datastax.driver.core.BoundStatement的一个实例。在索引 1 上,我在用户集中设置名称的值。
即使设置了名称的后端类型并且我使用的是 BoundStatement-> setList,它仍然可以毫无错误地执行并正确输入名称中的值。这是 datastax 驱动程序中 BoundStatement 的功能吗?
当我尝试为在后端服务器中设置的参数设置列表时,为什么它没有抛出错误?
你可以说这是 datastax 驱动程序中的错误。
当您使用 boundStatement.setList
或 boundStatement.setSet
绑定数据时,这两种方法都使用 lookupCodec
方法来查找具有列类型的编解码器并且不验证值。
但是如果你使用 statement.bind
绑定数据,它会使用 findCodec
方法找到具有列类型的编解码器并使用给定值
进行验证
if ((cqlType == null || cqlType.getName() == LIST) && value instanceof List) {
//...........
}
if ((cqlType == null || cqlType.getName() == SET) && value instanceof Set) {
//............
}
我有一个 table 用户集
create table IF NOT EXISTS userset (id int primary key, name set, phone set, emails list);
现在我正在通过 datastax java 驱动程序执行插入语句:cassandra-driver-core-3.1.0.jar。现在我有一个 java.util.List 的字符串说 listString
List<String> listString = new ArrayList<String>();
listString.add("NewName");
boundStatement.setList(1, listString);
这里的boundStatement是com.datastax.driver.core.BoundStatement的一个实例。在索引 1 上,我在用户集中设置名称的值。
即使设置了名称的后端类型并且我使用的是 BoundStatement-> setList,它仍然可以毫无错误地执行并正确输入名称中的值。这是 datastax 驱动程序中 BoundStatement 的功能吗?
当我尝试为在后端服务器中设置的参数设置列表时,为什么它没有抛出错误?
你可以说这是 datastax 驱动程序中的错误。
当您使用 boundStatement.setList
或 boundStatement.setSet
绑定数据时,这两种方法都使用 lookupCodec
方法来查找具有列类型的编解码器并且不验证值。
但是如果你使用 statement.bind
绑定数据,它会使用 findCodec
方法找到具有列类型的编解码器并使用给定值
if ((cqlType == null || cqlType.getName() == LIST) && value instanceof List) {
//...........
}
if ((cqlType == null || cqlType.getName() == SET) && value instanceof Set) {
//............
}