免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2634 | 回复: 1
打印 上一主题 下一主题

寻求答案 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-15 02:37 |只看该作者 |倒序浏览
摘抄于http://www.javaworld.com.tw/jute/post/print?bid=21&id=180045

1.为什么我用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[i - 1]);   
            }   
            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执行批量插入总是只能插入一条数据? [Re: andy840920] 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执行批量插入总是只能插入一条数据? [Re: andy840920] 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里的第一次设置参数就出异常呢?我也很是不明白。

论坛徽章:
0
2 [报告]
发表于 2008-03-17 09:20 |只看该作者
我找到答案了,jdbc 驱动有问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP