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

来源:互联网 发布:淘宝上卖燕窝不让卖 编辑:程序博客网 时间:2024/06/04 08:03

问题:

      

    } 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();

0 0
原创粉丝点击