请教代码是否规范合理,主要涉及异常和数据库连接

TheUnforgiven 2006-02-23 02:19:44
想学着尝试写规范而且合理的代码,主要是针对异常处理和数据库连接操作的,希望高手们给予指点。

代码的意图如下:

类Connctn有个static方法getCon(),用于返回一个Connection con,代码略;
ServletA调用Connctn,得到数据库连接con,然后调用一个类ClassB,把con及几个SQL字符串给ClassB,ClassB处理完后返回给ServletA一些Vector,ServletA将Vector给JavabeanC,然后forward,以后的省略。

代码如下:
----------------ServletA
public class ServletA extends HttpServlet {
private Connection con;
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
doGet(request, response);
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
this.con=DataBaseCon.getCon();//--------注意的是,这个类本身并未对数据库进行操作
//省略若干行代码……
Vector v=new Vector();
ClassB b=new ClassB(con);
JavabeanC c=new JavabeanC();
String sql=……;
v=b.getResult(sql);
c.setAAA(v);
sql=……;
v=b.getResult(sql);
c.setAAA(v);
……
try {
con.close();
}
catch (Exception e) {
System.out.println("关闭数据库连接时出现异常!");
e.printStackTrace();
}
forward
……
}
}


----------------ClassB
public class ClassB{
private Connection con;
public GetRecord(Connection con) {//用构造方法来获得数据库连接
this.con=con;
}
public Vector getResult(String sql) {
Vector v=new Vector();
try {
PreparedStatement pstmt=con.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
……
v.add(……;
}
rs.close();
pstmt.close();
}
catch(SQLException sqle) {
System.out.println("类ClassB读取数据库时出现异常,可能导致数据不完整!");
sqle.printStackTrace();
}
catch(Exception e) {
System.out.println("类ClassB出现异常!");
e.printStackTrace();
}
return v;
}
}

问题一:为了避免频繁的调用ClassB可能会造成多次的建立数据库连接,所以改在ServletA中建立连接,ClassB使用连接,最后在ServletA中关闭连接,这个想法应该是没有错的吧?那么我的具体实现在实际应用中是否可行,或者有无更好的方法???
问题二:在ClassB中如果出现异常,程序跳转到Catch处,那么是否有必要将rs.close();和pstmt.close();也像ServletA中con.close();那样写到finally中???
最后,请高手们指点我的程序里其他应该改进的地方,谢谢。

...全文
71 2 点赞 打赏 收藏 举报
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
TheUnforgiven 2006-02-23
谢谢楼上兄弟。
还有没人来指点下?
  • 打赏
  • 举报
回复
figoren 2006-02-23
如果是多行数据的话Vector v=new Vector(); 应该写在while(rs.next())中吧
还有建议使用ArrayList代替Vector
如果怕数据不完整应该在A里面使用con.setAutoCommit(false) 执行完所有操作后con.commit()
如果出现异常在catch里con.rollback() 最后在finally里面con.close 关闭连接前判断if(con!=null && !con.isClosed())
  • 打赏
  • 举报
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2006-02-23 02:19
社区公告
暂无公告