我正面临着这个错误 现在安静一下,我有这个疑问:
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);
我使用com.ibm.db2.jcc.DB2Driver驱动程序连接到db2数据库并收到此错误:
com.ibm.db2.jcc.am.SqlSyntaxErrorException: [jcc] [1091] [10417] [3.62.56]无效的数据转换:参数 实例com.ibm.db2.jcc.am.p@6b09bb57对请求的内容无效 转换。 ERRORCODE = -4461,SQLSTATE = 42815 在com.ibm.db2.jcc.am.fd.a(fd.java:676)
不可能将数组设置为db2的准备好的内容吗?它不受支持?还有其他选择吗?
答案 0 :(得分:2)
查看site of IBM似乎不,不支持。
在表19(支持setArray
方法)中搜索方法java.sql.PreparedStatement
。
答案 1 :(得分:0)
您必须以编程方式创建循环以创建IN (?,?,? ... )
子句,并为setXXX()
的每个?
创建另一个PreparedStatement
循环。
另外,如果1000s元素中的IN
子句编号,则可能需要将其拆分并将部分结果与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);
}