关闭数据库连接的一点疑惑

来源:百度知道 编辑:UC知道 时间:2024/05/16 04:39:20
定义一个关闭数据库连接的方法
public static void CloseConnection(Connection con)
{
try
{
if (con!=null && !con.isClosed())
{
con.close();
}
}
catch (SQLException e)
{

}
}
一般来说上面这个关闭方法是被其他方法调用来关闭数据库连接的。
但是如果现在执行关闭时发生了异常,我的异常如何处理??
①我觉得这个异常似乎没有任何意义,因为就算我知道发生异常了。我也没法做处理。总不见得在catch里继续 con.close()吧。既然无法处理,Java何苦要设定close()方法是强制异常呢???
②在不手动操作数据库的前提下,如果有处理的方法,麻烦各位大侠 教教了~~。连接池的方法不算,不是问题的根本。
③有没有强制断开连接的方法呢??
我在提问中已经说明了:
“一般来说上面这个关闭方法是被其他方法调用来关闭数据库连接的。”
基本上都是在finally里才调用con.close()。
问题是con.close()现在出异常了,
难道在finally里
继续con.close()?

con.close()这个方法,捕捉异常似乎没什么意义,因为我捕捉到异常后实在是想不出做什么。。。。
出了异常:
关闭失败,捕捉了异常之后我干什么?继续调用con.close()?
我想不会是这种方法吧。无论是catch还是finally里调用,都没意义似乎。
总不能指望我调用N次close()后,连接突然能正常关闭了吧。。这显然不可取。

至于回收机制,连接关闭失败,也就是说con依然是连接资源的引用,我想它应该不属于垃圾资源吧。
或者说Java的垃圾回收机制对这种情况有特别的说明?

实在无语,本来不该对想给我帮助的人说这

抛异常写日志啊,在catch里面写printTrace是不可能在实际生产环境中用的,当然close失败是一种非常严重的异常,必须将它写日志以备追查问题,实际生产环境的系统都是透过日志追踪问题的,要不然那几万行代码你怎么找问题啊?

你捕捉了异常之后我干什么?
你应该做数据回滚呀.都异常了,当然要把些操作失败的数据回滚掉呀.

你要不close()/那是不是连接池一直connection数量越来越少??最后就没有了.一直被占用掉了.

楼主很好学
三个问题
其实是可以控制的,使用finally就可以了

在finallY调用跟外面不一样为什么,不一样呢

看看JVM的垃圾回收机制 异常处理机制把