2017-07-03 62 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

可以打印错误 –

相关问题