首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

web项目,批处理代码,求批改

2012-09-06 
web项目,批处理代码,求修改。Java codeString sq1select * from HrEmployee where cardid in(+sa+)St

web项目,批处理代码,求修改。

Java code
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();                                                


排版有点乱,两个疑问,一个希望
1.那个close是关闭数据库连接的,核心代码,就是Connection 对象调用close()方法,我想问的是,用的着这样,关闭3次吗?
2.三次批处理,用了3个PreparedStatement对象,我想问,可以将这个对象反复使用吗?使用把它初始化成什么比较合理。
3.谁能帮我优化下,这批处理代码。谢谢

------解决方案--------------------


Java code
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之类的 自动管理事物。

热点排行