2017-07-27 41 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) { 
    //............ 
} 
驗證