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

lxpandsq 2012-07-31 11:55:43


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.谁能帮我优化下,这批处理代码。谢谢
...全文
115 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
z_yes163 2012-08-01
  • 打赏
  • 举报
回复
1.那个close是关闭数据库连接的,核心代码,就是Connection 对象调用close()方法,我想问的是,用的着这样,关闭3次吗?>>>>>>可以只关闭一次 你把Connection 提成似有全全局成员变量 只初始化一次 可以用构造方法或者是set 方法
2.三次批处理,用了3个PreparedStatement对象,我想问,可以将这个对象反复使用吗?使用把它初始化成什么比较合理。 PreparedStatement 可以反复使用 java 是从前到执行的,前面用完 后面有重新赋值 和你构造一个新对象有什么区别。

最后关于关闭的 问题 你可以抽出 一个公共关闭方法 在 finally 调用 ,或者你直接用框架 比喻spring之类的 自动管理事物。
lxpandsq 2012-07-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
msql.close();

PreparedStatement psStatementin1=msql.executeUpdate(sqla1,strDB2);

关闭了数据库连接,后面又使用这个连接,肯定报错了
[/Quote]
错是没错的,因为获取连接,实在另外一个类里面,就是msql.executeQuery(sq1,strDB1);
只是我感觉,返回获取和关闭是否,是必须的,还有PreparedStatement这个对象,真的需要反复申请吗?不能赋值的方式,使用同一个这个对象吗?
lip009 2012-07-31
  • 打赏
  • 举报
回复

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;
}
}
lip009 2012-07-31
  • 打赏
  • 举报
回复
msql.close();

PreparedStatement psStatementin1=msql.executeUpdate(sqla1,strDB2);

关闭了数据库连接,后面又使用这个连接,肯定报错了
lip009 2012-07-31
  • 打赏
  • 举报
回复
一次完整的业务操作一个连接,不是整个web
lxpandsq 2012-07-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
引用 4 楼 的回复:

引用 2 楼 的回复:
msql.close();

PreparedStatement psStatementin1=msql.executeUpdate(sqla1,strDB2);

关闭了数据库连接,后面又使用这个连接,肯定报错了

错是没错的,因为获取连接,实在另外一个类里面,就是msql.executeQuery(sq1,strDB1);
……
[/Quote]

您的意思是,我整个web,只用获取一次连接,就好?而不是我现在这样,用一次,开一次,关一次?
lip009 2012-07-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

引用 2 楼 的回复:
msql.close();

PreparedStatement psStatementin1=msql.executeUpdate(sqla1,strDB2);

关闭了数据库连接,后面又使用这个连接,肯定报错了

错是没错的,因为获取连接,实在另外一个类里面,就是msql.executeQuery(sq1,strDB1);
只是我感觉,返回获取和关闭……
[/Quote]

数据库连接只需要一个就可以,
PreparedStatement必须一次操作使用一个,因为PreparedStatement必须在使用完后close,否则会造成内存泄露。

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧