<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經轉移至github,大家請訪問 http://qaseven.github.io/

    數據庫注冊兩種方式的比較

    在學習JDBC的時候,通常有兩種方式去注冊數據庫驅動程序(這里采用MySQL數據庫),分別為:
    DriverManager.registerDriver(new Driver());
    Class.forName("com.mysql.jdbc.Driver");
      那么這兩種方式有什么異同呢?首先我們到DriverManager中去看一下,
    public static synchronized void registerDriver(java.sql.Driver driver)
    throws SQLException {
    if (!initialized) {
    initialize();
    }
    DriverInfo di = new DriverInfo();
    di.driver = driver;
    di.driverClass = driver.getClass();
    di.driverClassName = di.driverClass.getName();
    // Not Required -- drivers.addElement(di);
    writeDrivers.addElement(di);
    println("registerDriver: " + di);
    /* update the read copy of drivers vector */
    readDrivers = (java.util.Vector) writeDrivers.clone();
    }
      很明顯,DriverManager將我們需要注冊的驅動程序信息封裝成DriverInfo放進了一個writeDrivers中,這個writeDrivers是DriverManager中聲明的一個static類型Vector變量。在getConnection的時候會再用到。
      那么Class.forName("com.mysql.jdbc.Driver")是如何注冊驅動程序的呢,我們知道Class.forName("類名")的主要作用是向虛擬機實例化一個Class實例,我們看一下com.mysql.jdbc.Driver的源代碼。
    public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    // ~ Static fields/initializers
    // ---------------------------------------------
    //
    // Register ourselves with the DriverManager
    //
    static {
    try {
    java.sql.DriverManager.registerDriver(new Driver());
    } catch (SQLException E) {
    throw new RuntimeException("Can't register driver!");
    }
    }
      在 com.mysql.jdbc.Driver中有一段靜態(tài)代碼塊,是向 DriverManager注冊一個Driver實例。這樣在 Class.forName("com.mysql.jdbc.Driver")的時候,就會首先去執(zhí)行這個靜態(tài)代碼塊,于是和DriverManager.registerDriver(new Driver())有了相同的效果。
      那么對于這兩種方法,在這里,我推薦使用第二種,即Class.forName("類名")的方式。原因有兩點
      1、在我們執(zhí)行DriverManager.registerDriver(new Driver())的時候,靜態(tài)代碼塊也已經執(zhí)行了,相當于是實例化了兩個Driver對象。
      2、 DriverManager.registerDriver(new Driver())產生了一種對MySQL的一種依賴。而Class.forName的方式我們完全可以在運行的時候再動態(tài)改變。

    posted on 2013-12-23 09:39 順其自然EVO 閱讀(243) 評論(0)  編輯  收藏 所屬分類: 數據庫

    <2013年12月>
    24252627282930
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    導航

    統(tǒng)計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 午夜视频在线在免费| 亚洲一级免费毛片| 免费在线看片网站| 国产精品亚洲综合久久| www.免费在线观看| 亚洲日本乱码卡2卡3卡新区| 国产91免费在线观看| 亚洲国产成人99精品激情在线| 日韩亚洲变态另类中文| 有码人妻在线免费看片| 中文字幕精品亚洲无线码一区应用| 亚洲中文字幕不卡无码| 国内精品久久久久影院免费| 亚洲国产精品无码专区影院 | 免费看国产成年无码AV片| 91亚洲国产成人久久精品| 成年大片免费视频| 国产精品亚洲а∨无码播放麻豆| 国产精品免费看久久久| 亚洲精品中文字幕无乱码| 成人免费无码大片A毛片抽搐色欲| 国产性爱在线观看亚洲黄色一级片| 亚洲天堂电影在线观看| 波多野结衣在线免费视频| 婷婷国产偷v国产偷v亚洲| 国产亚洲精品无码专区| 19禁啪啪无遮挡免费网站| 中国china体内裑精亚洲日本| 日韩电影免费在线观看| 亚洲 日韩 色 图网站| 亚洲国产V高清在线观看| 亚洲一区免费观看| 亚洲国产精品综合久久久| 免费观看四虎精品国产永久| a级毛片高清免费视频就| 亚洲国语在线视频手机在线| 四虎永久免费影院在线| 久9久9精品免费观看| 亚洲av日韩综合一区久热 | 女人让男人免费桶爽30分钟| 日日躁狠狠躁狠狠爱免费视频|