当Statement,ResultSet抛出错误之后,他是否会自动关闭?还是要手动关闭?

wuguix 2006-03-14 09:46:01
第一种写法
public void getit(Connection con,String id)throws Exception
{
String sql="select * from .. where id="+id;
Statement sm = conn.createStatement();
ResultSet rs = sm.executeQuery(sql);
if(rs.next){
System.out.print(rs.getString(2));
}
if(rs!=null)
rs.close();
rs=null;
if(sm!=null)
sm.close();
sm=null;
}


第二种写法
public void getit(Connection con,String id)throws Exception
{
Statement sm =null;
ResultSet rs=null;
String sql="select * from .. where id="+id;
try{
sm = conn.createStatement();
rs = sm.executeQuery(sql);
if(rs.next){
System.out.print(rs.getString(2));
}

}catch(Exception e){
throw new Exception(e);
}finally{
if(rs!=null)
rs.close();
rs=null;
if(sm!=null)
sm.close();
sm=null;
}
}
第二种写法比较安全,但是他会影响性能。
...全文
139 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wuguix 2006-03-15
更正!

关系==关闭
回复
wuguix 2006-03-15
因为捕获错误再抛出会影响性能,
但是如果resultset 或者statement 自身在出现错误的时候能自行关系,那使用第一种写法更好。是不是?
回复
yxxx 2006-03-14
楼主说会怎么影响性能?
回复
aylian 2006-03-14
第二种写法为JAVA的推荐写法,我觉得没什么问题,不知道楼主为什么说会影响性能?
回复
wuguix 2006-03-14
mm
回复
wuguix 2006-03-14
大家都来发表一下观点啊。
回复
wangx1949 2006-03-14
第二种方法好,Statement,ResultSet如果不关闭,可能引起内存泄漏,这样麻烦更大.
回复
wuguix 2006-03-14
当然了,如果你把错误不抛出来,调用你方法的程序怎么捕获异常?
回复
螃蟹k3179 2006-03-14
public void getit(Connection con,String id)
{
Statement sm =null;
ResultSet rs=null;
String sql="select * from .. where id="+id;
try{
sm = conn.createStatement();
rs = sm.executeQuery(sql);
if(rs.next){
System.out.print(rs.getString(2));
}

}catch(Exception e){
e.printStack();
}finally{
if(rs!=null)
rs.close();
rs=null;
if(sm!=null)
sm.close();
sm=null;
}
}
这么写不好吗
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2006-03-14 09:46
社区公告
暂无公告