java-JDBC:如果丢失对Connection对象的引用,连接是否断开?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-JDBC:如果丢失对Connection对象的引用,连接是否断开?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1678字,纯文字阅读大概需要3分钟。
内容图文
![java-JDBC:如果丢失对Connection对象的引用,连接是否断开?](/upload/InfoBanner/zyjiaocheng/671/a77363ba818849fc94cb31f659a9f5af.jpg)
如果我有以下方法-
public static void C() {
Connection con = DriverManager.getConnection();
.... // code
return;
}
而且我不调用con.close(),一旦方法返回,连接会自动终止吗?
解决方法:
…will the connection terminate automatically once the method returns?
不,不会.它最终可能会关闭,也可能不会最终关闭,但是如果有的话,距离它还需要很长的时间.如果连接类的终结器处于打开状态,则它可能会关闭该连接,但是在很多情况下,终结器永远不会运行.显式调用con.close()至关重要.
这是我通常的处理方式(尽管我已经将很多这种逻辑考虑进了助手中,因为否则很冗长):
public static void C()
throws SQLException
{
Connection con = DriverManager.getConnection();
try {
.... // code
// done with the connection
con.close();
con = null;
}
finally {
if (con != null) {
try {
con.close();
}
catch (Exception e) {
// Eat it to avoid masking any exception that
// got us here
}
}
}
}
请注意,在finally子句中检测到未关闭的连接后,我将其关闭,但不允许任何异常,否则可能会导致抛出该错误.这是因为主逻辑正确地关闭了连接,这意味着,如果我在finally块中找到了打开的连接,则已经引发了异常,我们正在处理它,所以我不想掩饰它.与con.close()引发不同的异常.
有了体面的助手,它就会变得更短,更容易编写:
public static void C()
throws SQLException
{
Connection con = DriverManager.getConnection();
try {
.... // code
// done with the connection
con = JDBCHelper.close(con); // <== This one *allows* any exception that occurs
}
finally {
con = JDBCHelper.quietClose(con); // <== This one *eats* any exception that occurs
}
}
…其中JDBCHelper(假设类)包含:
public static final Connection close(Connection con)
throws SQLException
{
con.close();
return null;
}
public static final Connection quietClose(Connection con)
{
if (con != null) {
try {
con.close();
}
catch (Exception e) {
}
}
return null;
}
内容总结
以上是互联网集市为您收集整理的java-JDBC:如果丢失对Connection对象的引用,连接是否断开?全部内容,希望文章能够帮你解决java-JDBC:如果丢失对Connection对象的引用,连接是否断开?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。