寻求答案
摘抄于http://www.javaworld.com.tw/jute/post/print?bid=21&id=1800451.为什么我用prepareStatement执行批量插入总是只能插入一条数据?Copy to clipboard
Posted by: andy840920
Posted on: 2007-01-11 18:06
db = new Database(dbURL, false);
conn = db.getConn();
pstmt = conn.prepareStatement(preSql);
conn.setAutoCommit(false);
for (int j = 0; j < commitCount; ++j) {
try {
pstmt.clearBatch();
pstmt.clearParameters();
String[] tmp = ((String[])setConf.elementAt(j));
for (int i = 1; i <= tmp.length; ++i) {
pstmt.setString(i, tmp);
}
pstmt.addBatch();
} catch (SQLException e) {
Loger.log.error("some operation about pstmt throw SQLException!\n" + e);
continue;
}
}
tmpRets = pstmt.executeBatch();
conn.commit();
我用上面的代码执行批量的插入,只执行一次executeBatch操作,但每次只能插入第一条数据,所以更通的办法是在for里面执行这个操作,这样就是一条数据就提交一次了,效率肯定低。但我不知道为什么会这样。我看网上很多类似代码也是这样的逻辑的啊。
另外,如果我不需要事务,我能否不要setAutoCommit,这样好像又不是一次提交是吗?而是每次都提交吗?
--------------------------------------------------------------------------------
2.Re:为什么我用prepareStatement执行批量插入总是只能插入一条数据? Copy to clipboard
Posted by: andy840920
Posted on: 2007-01-11 21:50
我把pstmt.clearBatch()放在for前面去了,可执行后出现:
java.sql.SQLException: System or internal error java.lang.ArrayIndexOutOfBoundsException: 22 >= 22
的异常,我的prepared sql是一上需要设置11列的语句,所以是在for中第二次设置时出了错,我不知道为什么会有这样的问题,我也做了pstmt.clearParameters(); 操作啊。
--------------------------------------------------------------------------------
3.Re:为什么我用prepareStatement执行批量插入总是只能插入一条数据? Copy to clipboard
Posted by: andy840920
Posted on: 2007-01-12 12:06
我调试了一下发现,我要设置的参数是11个,在循环两次后都没有问题,第三次时设置第一个参数就会抛出下面的异常System or internal error java.lang.ArrayIndexOutOfBoundsException: 22 >= 22
如果我要设置的参数是10个的话,在循环两次后还是没问题,第三次时设置第一个参数就会出现类似的异常信息:
System or internal error java.lang.ArrayIndexOutOfBoundsException: 20 >= 20
我就想为什么总是在第三个batch里的第一次设置参数就出异常呢?我也很是不明白。 我找到答案了,jdbc 驱动有问题
页:
[1]