快3网上购买

JDBC:JDBC资源释放的细节问题

电脑杂谈  发布时间:2019-09-03 09:02:04  来源:网络整理

mcafee dlp 释放代码_mcafee 释放代码_mcafee dlp 释放代码

本文链接:

在前言博客介绍了jdbc的基本用法,其中有一段代码是这么的:

mcafee dlp 释放代码_mcafee 释放代码_mcafee dlp 释放代码

public static void main(String[] args) {  
        Connection conn = null;  
        Statement state = null;  
        ResultSet set = null;  
        try {  
            //注册驱动  
            DriverManager.registerDriver(new Driver());  
            //获取连接     
             conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "");  
            //获取传输器对象  
             state= conn.createStatement();  
            //利用传输器对象执行sql语句  
             set=state.executeQuery("select * from emp");  
            while(set.next()){  
                System.out.println(set.getString("name"));  
            }  
        } catch (SQLException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }finally{  
            try {  
                set.close();  
                state.close();  
                conn.close();  
            } catch (SQLException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
  
        }  
    }  
可以发现很多代码的最终有三句XX.close释放资源,但是这种写释放资源还是有问题的,由于上篇博客是入门的,所以就不讨论更加复杂的难题,把重点放到如何使用jdbc上了。

那么本篇博客将探讨怎样释放资源。

mcafee 释放代码_mcafee dlp 释放代码_mcafee dlp 释放代码

在jdbc中Connection是比较稀缺的资源,使用完以后应该立即释放,甚至需要以”迟占用,早释放“的方法使用,也就是说在使用的过程中尽可能地要用的之后才创建Connection一用完应该立即关闭释放。

而且里面那段代码一开始:

mcafee dlp 释放代码_mcafee dlp 释放代码_mcafee 释放代码

  Connection conn = null;  
        Statement state = null;  
        ResultSet set = null;  
就定义了三个空值,如果往后执行,还没执行到给你们三个变量数组就抛异常了,这个之后程序会catch一场然后执行finally里面的句子,但是这个之后set,state,conn都是空的,空的对象调用方式又会抛出nullpointexception,这个之后整个程序就崩溃了。所以在关闭之前必须先判空 。

尽管进行了判空再关闭资源还是会有问题的mcafee dlp 释放代码快3网上购买,请看最终关闭资源的之后:

mcafee dlp 释放代码_mcafee dlp 释放代码_mcafee 释放代码

try {  
                set.close();  
                state.close();  
                conn.close();  
            } catch (SQLException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
把所有关闭语句写在同一个try块里面,一旦上面的管比喻句抛异常,后面的关闭语句就能够执行了,所以不能这样写,要给每个关闭语句一个try块。最后为了确保资源无法传递,还有在每个关闭语句的前面加一个finally,在finally里给要关闭的资源赋值为空。这样即使在关闭过程中抛异常不能及时关闭mcafee dlp 释放代码,但是因为赋值为空,没有引用该资源,在垃圾回收的之后也无法回收。

下面是严谨正确的关闭资源的写法,对于其他关闭资源也可以参考这些写法:


本文来自电脑杂谈,转载请注明本文网址:
http://www.kadakong.com/a/jisuanjixue/article-121537-1.html

    相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 王季则
      王季则

      就必然会提高存款利率上浮

      • 李雄
        李雄

        还有日本的东西质量就是好

    • 比尔
      比尔

      中国几十年前就打过3--4次好不好

    内蒙古快三走势图 99彩票导航网 快3投注平台 六合开奖网址 快三网上投注 天津11选5 万发彩票官网 幸运飞艇app彩票 海南4+1 天津11选5