2016-04-07 68 views
1

我嘗試了很多時間來解決這個問題,所以非常感謝您的幫助。 如何在預處理中使用陣列?我這樣做,就像這個例子How to use an arraylist as a prepared statement parameter但它返回我的錯誤,我的代碼:如何在一個PrepareStatement中使用Array或List <>(sqlite)

 //initialize 
     ResultSet rs2; 
     connection2 = sqliteConnection.dbConnector(); 
     PreparedStatement statement2=connection2.prepareStatement("SELECT surname FROM users where id IN (?)"); 

     //like in the example linked, but it did not work: 
     Array array = connection2.createArrayOf("VARCHAR", new Object[]{"1", "2"}); 
     statement2.setArray(1, array); 
     rs2=statement2.executeQuery(); 

     //to keep data from resultset, it works fine 
     List<String> rsDATA = new ArrayList<String>(); 
     while(rs2.next()){ 
      rsDATA.add(rs2.getString("surname")); 
     } 
     for(int i = 0; i < rsDATA.size(); i++) { 
      System.out.println(rsDATA.get(i)); 
     } 
     connection.close(); 

但返回錯誤:

Exception in thread "AWT-EventQueue-0" java.lang.AbstractMethodError: org.sqlite.SQLiteConnection.createArrayOf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/sql/Array; 
at lines: 

1)Array array = connection2.createArrayOf("VARCHAR", new Object[]{"1", "2"}); 
2(executeQuery(); 

這是非常重要的,我要解決這個問題。謝謝了很多..

回答

0

你需要在你的WHERE子句中使用IN

SELECT surname FROM users WHERE id IN (?) 

java.sql.Array對象如圖所示答案的鏈接的問題。

+0

我這樣做就像你提示我,但正如你可以看到它仍然返回錯誤,它如何可以改變?我能用它做什麼? – arkani

+0

@arkani您的sqlite JDBC驅動程序可能已過時,請參閱http://stackoverflow.com/questions/16408591/java-lang-abstractmethoderror-org-sqlite-conn-createarrayof-error-while-calling。但正如在答案中指出的,sqlite可能沒有'java.sql.Array'實現。 – wero

+0

它的確如此,sqlite沒有java.sql.Array實現。那麼還有其他辦法可以做到嗎?這是一個很大的項目,我不能更改jdbc .. 可以通過一些循環來完成語句以跳過數組問題嗎? – arkani

相關問題