我有一个表userset
创建表IF NOT EXISTS userset(id int主键,名称集,电话集,电子邮件列表);
现在我通过datastax java驱动程序执行insert语句:cassandra-driver-core-3.1.0.jar。现在我有一个String的java.util.List,表示listString
List<String> listString = new ArrayList<String>();
listString.add("NewName");
boundStatement.setList(1, listString);
这里的boundStatement是com.datastax.driver.core.BoundStatement的一个实例。在索引1上,我在userset中设置name的值。
即使设置了后端类型的名称,我正在使用BoundStatement-&gt; setList它仍然执行而没有任何错误,并正确输入名称中的值。这是数据共享驱动程序中BoundStatement的功能吗?
当我尝试为后端服务器中设置的参数设置setList时,为什么不会抛出错误?
答案 0 :(得分:1)
您可以说这是数据存储驱动程序中的错误。
使用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) {
//............
}