2017-07-27 71 views
0

我有一个表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设置为后端服务器中的参数时,它会引发错误?

回答

1

你可以说这是datastax驱动程序中的一个错误。

当你与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) { 
    //............ 
} 
验证