我的程序中是这样的
try{
for(...){
...
stmt.setString(3, "01035");
...
stmt.addBatch()
}(Exception e) {
  e.printStackTrace();
}
}
stmt.executeBatch();
stmt.close();
"01035"是一个比第3列长的字符串,为什么我的第一个异常没有捉到,而在stmt.executeBatch()的时候也不报错,但数据库就是插不进去
如何才能扑捉到这个异常

解决方案 »

  1.   

    把你插入的那句话用try{}catch(Exception){}捕捉。
      

  2.   

    这个不是异常
    是你没想明白问题是怎么发生的我个人认为:
    Statement的setString貌似是给某些sql语句用来注入变量参数的就算是setString是为了插入的
    但是addBatch的时候你根本没有任何的Batch可用啊
    每个Batch是一个sql语句
    而不是说你set的数字或字符串如果你想插入多个
    并且验证事务的原子性的话1、启用事务
    2、写sql语句,并addBatch()
    3、把你的for的代码写出来
    我感觉那里可能会有问题
      

  3.   

    while ((LINE_KEY = file1.readLine()) != null) {
    String[] fields = LINE_KEY.split(fieldLimitChar,-1);
    try{
    ...
    stmt.setString(3, fields[2].trim());
    ...
    stmt.addBatch()
    }(Exception e) {
    e.printStackTrace();
    }
    我的程序就是读取一个文本,拆分每一行数据,然后插到数据库中,我debug了一下,程序根本没有走进上边的异常,而是在stmt.executeBatch()的时候报的异常
      

  4.   

    没有catch到异常的原因是stmt.executeBatch();
    stmt.close();这两个语句,你没有放在try里,而是放在了try之后,所以就不能catch了。
      

  5.   

    大概原因我明白了,只要在executeBatch()的时候 才能扑捉到异常,而前边add的时候扑捉不到,看来想要每条记录都跟踪,只能就不能用批处理了,只能一条一提交了。