Oracel 10G的JDBC Driver限制最大Batch size好像是16383条,如果你的addBatch超过这个限制,那么executeBatch时就会出现“无效的批值”(Invalid Batch Value) 异常,错误编号是ORA-17042。
解决方案是:减小Batch size,或用Oracle 9的JDBC Driver,或者等着Oracle修改这个bug。
我用过的代码,当时是40万条。
conn.setAutoCommit(false);
PreparedStatement ps = conn.prepareStatement("INSERT INTO user(id,name) VALUES(?, ?)");
for (int i = 0; i < 10000; i++) {
ps.setInt(1,i);
ps.setString(2,"name_"+String.valueOf(i));
ps.addBatch();
ps.clearParameters();
}
ps.executeBatch();
conn.commit();