近日做一个短信平台的项目,需要将几十万的数据插入到Oracle数据库中,下面的代码在一百条数据下是正确执行的,但五百条的时候就报错。所报的错误为“java.sql.SQLException: ORA-00604: 递归 SQL 级别 1 出现错误
ORA-01000: 超出打开游标的最大数”,求大侠指教
Java codetry {
conn = getDba().getConnection();
conn.setAutoCommit(false);
for (TblMmsImpPhone importNum:numList) {
String sql = "insert into tbl_mms_importphone (id,phonenum,flag,temid) values(SEQ_TBL_IMPORTPHONE.nextval,'"+ importNum.getPhonenum()+ "',0,"+ importNum.getTemId() + ")";
ps = conn.prepareStatement(sql);
count += ps.executeUpdate();
if ((count % 100) == 0) {
conn.commit();
}
}
conn.commit();
conn.setAutoCommit(true);
} catch (Exception e) {
success = false;
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
} finally {
close(ps, conn);
}
首先把insert语句改成insert into tbl_mms_importphone (id,phonenum,flag,temid) values(?,?,?,?)的形式,这样可以减少sql编译的时间。
其次改成batch update的方式
ps = conn.prepareStatement(sql);
ps.addBatch();
判断batch数目然后ps.executeBatch();