2017-07-03 85 views
1

我想傳遞一個String數組來一份聲明,但它返回此異常:傳遞一個字符串數組來一份聲明中陣列(JDBC + SQLServer的)

java.sql.SQLFeatureNotSupportedException: This operation is not supported. 
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.createArrayOf(SQLServerConnection.java:2763) 
    at entity.dao.getRecords(Dao.java:168) 
    at entity.dao.main(Dao.java:227) 

我的代碼是:

public List<Record> getRecords() throws SQLException { 
     String sql = "select * from table where clause in (?)"; 

     PreparedStatement ps = this.connection.prepareStatement(sql); 

     List<String> strings = new ArrayList<>(); 
     strings.add("string1"); 
     strings.add("string2"); 
     strings.add("string3"); 

     Array array = this.connection.createArrayOf("VARCHAR", strings.toArray()); 

     ps.setArray(1, array); 

     ResultSet executeQuery = ps.executeQuery(); 
     List<Record> records = new ArrayList<Record>(); 
     Record record; 
     while (executeQuery.next()) { 
      // ... 
     } 
     return records; 
    } 

異常的線是Array array = this.connection.createArrayOf("VARCHAR", strings.toArray());

這是當我嘗試創建陣列。

我已經搜索瞭如何傳遞數組,並且每個人都這樣做,但似乎不適用於SQLServer。

+0

使用此:'ps.setString(1, 「 '逗號', '分開', '價值'」);' –

+0

這個例子只有didatic。在我工作的場景中,我有一百個字符串。 –

+0

@GordThompson這篇文章不談論sql-server。 –

回答

0

可以使用,或者,一個的createQuery statemen(實體管理器)

String sql= "select * from Table table where table.clause IN :clauses"; 
Query query = em.createQuery(sql, Record.class); 

List<String> strings = new ArrayList<>(); 
     strings.add("string1"); 
     strings.add("string2"); 
     strings.add("string3"); 

query.setParameter("clauses", strings); 
List<Record> result= query .getResultList(); 
+1

這是一個解決方案,但我遇到了JPA的麻煩,我不知道如何解決。 –

+0

當我在我的實體類中插入註釋@Entity @Table(name =「table」)時,entityManager不再工作。 –

+0

可以打印錯誤 –

相關問題