我使用MSSQL SERVER处理Java 1.7项目。

我尝试将ID数组添加到查询中:

List<String> ids = new ArrayList<String>(3);
ids.add("32123");
ids.add("4455");
ids.add("1258");
String sqlStatement = "SELECT * FROM databaseName
WHERE id IN(?)";
Connection c = null;
PreparedStatement s = null;
ResultSet rs = null;
try {
    Object[] objArr = new Object[ids.size()];
    objArr = ids.toArray(objArr);
    c = bbbDataSource.getConnection();
    s = c.prepareStatement(sqlStatement);
    Array array = c.createArrayOf("VARCHAR", objArr);
    s.setArray(1, array);
    rs = s.executeQuery();
}


我得到的错误是这样的:

Exception thrown bean: java.lang.abstractMethodError: net.sourceforge.jtds.jdbcx.proxy.ConnectionProxy.createArrayOf(LJava/lang/String:[LJava/lang/Object:)LJava/lang/Array;


我究竟做错了什么?

最佳答案

基本上,您不能在jTDS库中使用createArrayOf方法。您必须使用其他数据库驱动程序库。

证据(从net.sourceforge.jtds.jdbc.JtdsConnection中提取的代码):

/* (non-Javadoc)
 * @see java.sql.Connection#createArrayOf(java.lang.String, java.lang.Object[])
 */
public Array createArrayOf(String typeName, Object[] elements) throws SQLException {
     // TODO Auto-generated method stub
    throw new AbstractMethodError();
}


您可以使用https://docs.microsoft.com/en-us/sql/connect/jdbc/microsoft-jdbc-driver-for-sql-server之类的东西,因为您正在使用SQL Server。

另一种选择是OscarRyz对PreparedStatement with list of parameters in a IN clause的回答

07-24 09:37
查看更多