基础问题,很简单~100分

liudang77 2006-03-16 01:16:43
我在一个方法中生成了一个statement但我没有关闭,这样可以吗?
是否因为是一个局部变量而自动的被关闭?
代码如下:

public static synchronized ResultSet getSearch(Connection conn,String sql){
ResultSet rs=null;
try{
Statement stmt=conn.createStatement();
ResultSet rstemp=stmt.executeQuery(sql);
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
return rs;

}
...全文
71 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wuyg719 2006-03-16
造成的后果是取决于statement具体的设计.

一般由于数据库连接占用一些客户端和服务器端的资源,没有关闭就会造成资源不能被释放,
是一个局部变量也只能保证客户端内存资源被释放,但服务器端的内存资源呢?客户端和服务器
端的tcpip端口呢?所有这些资源均取决于statement的关闭,所以能关闭的时候,尽量关闭。
回复
taolei 2006-03-16
这样写不可以,java里局部变量所引用的对象不会立即被释放。但也不能立即close Statement,否则ResultSet将不可用。要在ResultSet使用完毕后按Statment,ResultSet的顺序调用close.
回复
liudang77 2006-03-16
代码修正一下: public static synchronized ResultSet getSearch(Connection conn,String sql){
ResultSet rs=null;
try{
Statement stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
return rs;

}
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

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