Cassandra Java驱动程序BoundStatement.setList也适用于set

时间:2017-07-27 06:59:05

标签: cassandra datastax-java-driver

我有一个表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时,为什么不会抛出错误?

1 个答案:

答案 0 :(得分:1)

您可以说这是数据存储驱动程序中的错误。

使用boundStatement.setListboundStatement.setSet绑定数据时,两种方法都使用lookupCodec方法查找具有列类型的编解码器,并且不验证该值。

但是如果使用statement.bind绑定数据,它会使用findCodec方法查找具有列类型的编解码器,并使用给定值进行验证

if ((cqlType == null || cqlType.getName() == LIST) && value instanceof List) {
    //...........
}

if ((cqlType == null || cqlType.getName() == SET) && value instanceof Set) {
   //............
}