卡桑德拉的Java驱动程序集BoundStatement.setList作品,以及
问题描述:
我有一个表USERSET卡桑德拉的Java驱动程序集BoundStatement.setList作品,以及
创建表的IF NOT EXISTS USERSET(ID INT主键,名称设置,手机设置,邮件列表);
现在我通过datastax java driver执行insert语句: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的功能。
为什么当我尝试将setList设置为后端服务器中的参数时,它会引发错误?
答
你可以说这是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) {
//............
}
验证