web项目,批处理代码,求修改。
String sq1="select * from HrEmployee where cardid in("+sa+")";String sq2="select * from EquFinger where cardid in("+sa+")";String sq3="select * from EquCard where cardid in("+sa+")";String st1[][]=msql.executeQuery(sq1,strDB1);String st2[][]=msql.executeQuery(sq2,strDB1);String st3[][]=msql.executeQuery(sq3,strDB1); String sqla0="insert into HrEmployee(EmplID,WorkID,CardID,DeptID,EmplName,Sex,EntryDate,LeaveYN,LastOperId,LastOperDate ) values (?,?,?,?,?,?,?,?,?,?)";String sqla1="insert into EquFinger (EmplID,CardNo,BackupID,Privilege,pws ) values (?,?,?,?,?)"; String sqla2="insert into EquCard (CardNo,EmplID,CardType,CardStatus ) values (?,?,?,?)"; PreparedStatement psStatementin=msql.executeUpdate(sqla0,strDB2); for(int i=0;i<st1.length;i++) { psStatementin.setString(1,st1[i][0]); psStatementin.setString(2,st1[i][1]); psStatementin.setString(3,st1[i][2]); psStatementin.setString(4,st1[i][3]); psStatementin.setString(5,st1[i][4]); psStatementin.setString(6,st1[i][5]); psStatementin.setString(7,st1[i][6]); psStatementin.setString(8,st1[i][7]); psStatementin.setString(9,st1[i][8]); psStatementin.setString(10,st1[i][9]); psStatementin.addBatch(); } psStatementin.executeBatch(); msql.close(); PreparedStatement psStatementin1=msql.executeUpdate(sqla1,strDB2); for(int i=0;i<st2.length;i++) { psStatementin1.setString(1,st2[i][0]); psStatementin1.setString(2,st2[i][1]); psStatementin1.setString(3,st2[i][2]); psStatementin1.setString(4,st2[i][3]); psStatementin1.setString(5,st2[i][4]); psStatementin1.addBatch(); } psStatementin1.executeBatch(); msql.close(); PreparedStatement psStatementin2=msql.executeUpdate(sqla2,strDB2); for(int i=0;i<st3.length;i++) { psStatementin2.setString(1,st3[i][0]); psStatementin2.setString(2,st3[i][1]); psStatementin2.setString(3,st3[i][2]); psStatementin2.setString(4,st3[i][3]); psStatementin2.addBatch(); } psStatementin2.executeBatch(); msql.close();
try{ //数据库操作代码 ... ... }catch(Exception e){ //出现异常时回滚数据库操作 msql.rollback();}finally{ //关闭数据库资源 if(psStatementin!=null){ psStatementin.close(); psStatementin=null; } if(psStatementin1!=null){ psStatementin1.close(); psStatementin1=null; } if(psStatementin2!=null){ psStatementin2.close(); psStatementin2=null; } if(msql!=null && !msql.isClose()){ msql.close(); msql=null; }}
[解决办法]
1.那个close是关闭数据库连接的,核心代码,就是Connection 对象调用close()方法,我想问的是,用的着这样,关闭3次吗?>>>>>>可以只关闭一次 你把Connection 提成似有全全局成员变量 只初始化一次 可以用构造方法或者是set 方法
2.三次批处理,用了3个PreparedStatement对象,我想问,可以将这个对象反复使用吗?使用把它初始化成什么比较合理。 PreparedStatement 可以反复使用 java 是从前到执行的,前面用完 后面有重新赋值 和你构造一个新对象有什么区别。
最后关于关闭的 问题 你可以抽出 一个公共关闭方法 在 finally 调用 ,或者你直接用框架 比喻spring之类的 自动管理事物。