当我使用 jdbc 运行以下查询时,出现如下所示的异常。这是一个简化的例子,preparedStatementSetter 和 setString 和 setInt 等其他部分运行成功。
public List<EmployeeMonitoringResultTo> searchEmployeesForEmployerInRange(final GetEmployeesForEmployerInRangeCriteria criteria) {
final StringBuilder sql =
new StringBuilder( "select * from CODES c ")
.append(" where c.TYPE in ( ? ) "); // TYPE has DATA_TYPE 12, TYPE_NAME VARCHAR
return jdbcTemplate.query(
sql.toString(),
new PreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps) throws SQLException {
ps.setArray(1, searchTypes());
}
},
new SpecificRowMapper<SpecType>()
);
}
private Array searchTypes() {
final Collection<String> collection = fetchStrings();
Array resultArray = null;;
try {
resultArray = jdbcTemplate.getDataSource().getConnection().createArrayOf("VARCHAR", collection.toArray());
} catch (SQLException e) {
log.error("Problem with created java.sql.Array", e);
throw e;
}
return resultArray;
}
引起:com.ibm.db2.jcc.am.SqlSyntaxErrorException: [jcc][10349][11717][4.13.80] 源类型 Object 的不支持交叉转换;。在 com.ibm.db2.jcc.am.id.a(id.java:677) 在 com.ibm.db2.jcc.am.id.a(id.java:60) 的 ERRORCODE=-4461, SQLSTATE=42815在 com.ibm.db2.jcc.am.id.a(id.java:103) 在 com.ibm.db2.jcc.am.ic.a(ic.java:289) 在 com.ibm.db2.jcc .am.ic.a(ic.java:191) 在 com.ibm.db2.jcc.am.kc.a(kc.java:1943) 在 com.ibm.db2.jcc.am.go.a(go .java:2289) 在 com.ibm.db2.jcc.am.go.setArray(go.java:2254) 在 com.jolbox.bonecp.PreparedStatementHandle.setArray(PreparedStatementHandle.java:261) 在 net.sf.log4jdbc。在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.