我现在正面临这个错误,现在我有这样的疑问:
String sql = "select US_KEY, US_LOGID, US_PASSWORD, US_SESSION, US_LASTLOGIN,\n" +
" US_LASTACCESS, US_INTENTOS, US_NOMBRE, US_APELLIDO, US_ESTADO,\n" +
" US_RAZON, US_RUT, US_DIGITOV, US_DIRECCION, US_EMAIL,\n" +
" US_TELEFONO, US_CARGO, TU_KEY, EM_KEY, US_ULTIMO_CAMBIO_PASS,\n" +
" US_TELEFONO2, US_PIN, US_BLOQUEO, US_CHECK_VOLATIL_PASS,\n" +
" US_PV_KEY_SELECTED, US_VD_KEY_SELECTED, US_SC_KEY_SELECTED,\n" +
" US_SECRET_ASK\n" +
" from DBUSER.USUARIO\n" +
" where US_KEY in (?) ";我把这些值设置如下:
Array array = query.getStatement().getConnection().createArrayOf("BIGINT",arrayOfLong);
query.setArray(param.getName(), array);我正在使用db2驱动程序连接到com.ibm.db2.jcc.DB2Driver数据库,并获得以下错误:
com.ibm.db2.jcc.am.SqlSyntaxErrorException: jcc10417无效数据转换:参数实例com.ibm.db2.jcc.am.p@6b09bb57对于请求的转换无效。ERRORCODE=-4461,SQLSTATE=42815 at com.ibm.db2.jcc.am.fd.a(fd.java:676)
不可能将数组设置为已准备好的db2?不支持吗?还有别的选择吗?
发布于 2016-12-12 13:18:46
查看IBM站点似乎不支持,不支持。
在表19中搜索方法setArray (支持java.sql.PreparedStatement方法)。
发布于 2016-12-12 20:52:18
您必须以编程方式创建一个创建IN (?,?,? ... )子句的循环,并为PreparedStatement的每个?创建另一个执行setXXX()的循环。
另外,如果您的IN子句在1000s元素中编号,您可能不得不将其拆分,并将部分结果与UNION合并。
// construct IN clause
for (int i =0; i < us_keys.length(); i++ ) {
inbuffer.append((i>0)?(',?'):('?'));
}
sql.append( "IN (" );
sql.append( inbuffer );
sql.append( ")" );然后
// assign all keys
int inkey=0;
for ( String us_key : us_keys ) {
stmt.setString(++inkey,us_key);
}https://stackoverflow.com/questions/41101743
复制相似问题