java.sql.SQLException: 批处理中出现错误: batch must be either executed or cleared

问题:

      

    } else {
                        sb.append(" and E.DATA_TYPE IS NULL ");
                    }
                        //检验数据库中是否有重复数据
                        re=queryState.executeQuery(sb.toString());
                        if (re != null && re.next()) {
                            String ID=re.getString("event_id");
                            //注意:DATAVALUE不为空时才修改数据.否则不修改
                            if(DATAVALUE!=null&&!"".equals(DATAVALUE)){
                            String sql="update "+toTable+" set PARAM_VALUE='"+DATAVALUE+"',LAST_MODIFIED=to_date(to_char(sysdate,'yyyy-MM-dd'),'yyyy-MM-dd') where EVENT_ID='"+ID+"'";
                            invokeState.addBatch(sql);//执行SQL 语句,插入、更新、删除数据
                            }
                    } else {
                        //DATAVALUE不为空时才插入数据.否则不插入
                        if(DATAVALUE!=null&&!"".equals(DATAVALUE)){
                        String sql="insert into "+toTable+" " +
                                "(TABLE_ID,PARAM_ID,PARAM_VALUE,KOUJING,FREQUENCE,AREA_CODE,DATA_SOURCE,THRESHOLD,PARAM_UNIT,EDITION_ID,INPUT_DATATIME,LAST_MODIFIED,DATA_TYPE,ORDERS,REMARK) " +
                       "values(\'"+TABLE_ID+"\',\'"+DATAID+"\',\'"+DATAVALUE+"\',\'"+KOUJING+"\',\'"+FREQUENCE+"\',\'"+REGION+"\',\'"+SOURCE+"\',\'"+THRESHOLD+"\',\'"+UNIT+"\'," +
                               "\'"+EDITION+"\',to_date(\'"+UPLOADTIME+"\','yyyy-MM-dd\'),\'\',\'"+DATATYPE+"\',\'"+ORDERS+"\',\'"+REMARK+"\')";
                        invokeState.addBatch(sql);//执行SQL 语句,插入、更新、删除数据
                        
                        }

                    }

                }
            }
                invokeState.executeBatch();//批处理,多条SQL 语句可以一次性执行完毕,称为批处理操作  
                long endTime= System.currentTimeMillis();
                 logger.info("start time:"+endTime);
                 logger.info("total time:"+(endTime-startTime));

运行到 
 invokeState.addBatch(sql);就报错了,我去数据库执行了SQL结果为空没有符合的数据,是这个原因么有点不确定

2012-10-10 14:14:46,900 ERROR [FileUploadInterceptor.java:228] : Could not find a Content-Type for file. Verify that a valid file was submitted.
java.sql.SQLException: 批处理中出现错误: batch must be either executed or cleared
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180)
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:222)


解决方法:一般通过另一个Statement操作就行了,即查询和插入,修改,不能共用一个stateMent;

但有时使用批处理也有一定的局限性,比如在成批导入数据时,如果不考虑唯一性,当然比较方便,但如果考虑这个问题就有点麻烦了,因为批处理一定要executeBatch()后才生效,
但在这个过程中,就无法判断临时表是否已经插入了同样的一条记录;

检查一下commit部分的语句发现,如有pstmt.executeBatch();改成了pstmt.executeUpdate();

你可能感兴趣的:(java.sql.SQLException: 批处理中出现错误: batch must be either executed or cleared)