public boolean insertCab(List list,int num){
boolean bRet=false;
Connection conn =new DBConnection().getConnection();
try{
Statement stmt =conn.createStatement();
for(int i=0;i<num;i++){
Keycab cab=(Keycab)list.get(i);
String sql="insert into kms_cabinfo values("+cab.getCabid()+","+cab.getMaxofkey()+",'"
+cab.getCabstate()+"','"+cab.getBstate()+"','"+cab.getSstate()+"',"+cab.getRows()+","
+cab.getCols()+")";
stmt.addBatch(sql);
stmt.executeBatch();
conn.commit();
}
bRet = true;
}catch(Exception ex){
try {
conn.rollback();
} catch (Exception ex2) {
System.err.println("rollback failed:" + ex2.getMessage());
}
}finally {
}
return bRet;
}问题是,如果list只有一个对象,此时num=1.这样可以正确写入数据库,而当list含有多个对象的时候,方法只能写入最后一条,而且返回bRet为false,不知道为什么,弄了两天了,还是没有搞定啊,急!!
boolean bRet=false;
Connection conn =new DBConnection().getConnection();
try{
Statement stmt =conn.createStatement();
for(int i=0;i<num;i++){
Keycab cab=(Keycab)list.get(i);
String sql="insert into kms_cabinfo values("+cab.getCabid()+","+cab.getMaxofkey()+",'"
+cab.getCabstate()+"','"+cab.getBstate()+"','"+cab.getSstate()+"',"+cab.getRows()+","
+cab.getCols()+")";
stmt.addBatch(sql);
stmt.executeBatch();
conn.commit();
}
bRet = true;
}catch(Exception ex){
try {
conn.rollback();
} catch (Exception ex2) {
System.err.println("rollback failed:" + ex2.getMessage());
}
}finally {
}
return bRet;
}问题是,如果list只有一个对象,此时num=1.这样可以正确写入数据库,而当list含有多个对象的时候,方法只能写入最后一条,而且返回bRet为false,不知道为什么,弄了两天了,还是没有搞定啊,急!!
stmt.executeBatch();
conn.commit();
stmt.executeBatch();
conn.commit();
先试试,有没有用
stmt.executeBatch();
conn.commit();
先试试,有没有用肯定要放到for循环外面的...
at oracle.jdbc.dbaccess.DBError.throwBatchUpdateException(DBError.java:626)
at oracle.jdbc.driver.OracleStatement.executeBatch(OracleStatement.java:6841)
at com.yjj.kms.dboperate.DBbaseoperate.insertCab(DBbaseoperate.java:29)
at com.yjj.kms.servlet.AdddataServlet.doAddcab(AdddataServlet.java:54)
at com.yjj.kms.servlet.AdddataServlet.doBusiness(AdddataServlet.java:38)
at com.yjj.kms.tool.BaseServlet.doPost(BaseServlet.java:39)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
你把这句放在sql语句的下面试试,因为可能是每做一次循环要声明一个新的statement对象,要是同一个的话commit()了多少次都是一条对象的吧?
就插入重复记录了,是要违反唯一约束的啊.如果改了以后还是出现这种错误的话,
就是list里有重复了,把sql字符串打印出来看看一样不一样.
insert into kms_cabinfo values(3,3,'Enabled','Closed','Closed',3,3)
insert into kms_cabinfo values(3,3,'Enabled','Closed','Closed',3,3)
Connection conn = null;
PreparedStatement psmt = null;
OrgmemberCard card = null;
try{
db = getDB();
conn = db.getConnection();
conn.setAutoCommit(false);
String sql = "insert into tb_saveorgcard (orgcardid, groupid, issale, kind)values (?, ?, 0, ?)";
psmt = conn.prepareStatement(sql);
for(Iterator e = cards.iterator();e.hasNext();){
card = (OrgmemberCard)e.next();
psmt.setString(1,card.getCardNo());
psmt.setInt(2,card.getSystemGroup().getGroupId());
psmt.setString(3,card.getKind());
psmt.addBatch();
}
psmt.executeBatch();
conn.commit();
}catch(Exception e){
rollback(conn);
throw new DAOException("录入会员卡号时异常:" + e.toString());
}finally{
close(psmt);
conn.setAutoCommit(true);
close(conn);
db.close();
}
}