我使用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的回答