您的位置:首页 > 编程语言 > Java开发

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

2014-05-15 14:46 931 查看
问题:

} 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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐