<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中有一段靜態代碼塊,是向 DriverManager注冊一個Driver實例。這樣在 Class.forName("com.mysql.jdbc.Driver")的時候,就會首先去執行這個靜態代碼塊,于是和DriverManager.registerDriver(new Driver())有了相同的效果。
      那么對于這兩種方法,在這里,我推薦使用第二種,即Class.forName("類名")的方式。原因有兩點
      1、在我們執行DriverManager.registerDriver(new Driver())的時候,靜態代碼塊也已經執行了,相當于是實例化了兩個Driver對象。
      2、 DriverManager.registerDriver(new Driver())產生了一種對MySQL的一種依賴。而Class.forName的方式我們完全可以在運行的時候再動態改變。

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

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

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 最新欧洲大片免费在线| 91国内免费在线视频| 亚洲国产乱码最新视频| 亚洲国产成人手机在线电影bd| 亚洲精彩视频在线观看| 亚洲国产精品网站久久| 亚洲综合激情另类小说区| 亚洲妇女水蜜桃av网网站| 亚洲人成伊人成综合网久久| 亚洲精品动漫在线| 亚洲a级在线观看| 美女视频黄频a免费大全视频| 三级片免费观看久久| 182tv免费视频在线观看 | 亚洲阿v天堂在线2017免费| 亚洲精品国产高清嫩草影院| 国产精品亚洲成在人线| 亚洲嫩草影院在线观看| 国产亚洲福利一区二区免费看| 国产日韩精品无码区免费专区国产 | a级毛片100部免费观看| 国产免费久久久久久无码| 免费午夜爽爽爽WWW视频十八禁| 一个人看的在线免费视频| 1区1区3区4区产品亚洲| 免费人成网站在线播放| 最近2019中文字幕免费直播| 免费国产黄网站在线看| 亚洲免费网站在线观看| 亚洲动漫精品无码av天堂| 国产片免费福利片永久| 免费成人激情视频| 免费毛片a线观看| 一级特级女人18毛片免费视频| 亚洲欧洲日本在线观看 | 亚洲中文字幕无码亚洲成A人片| 国产成人综合亚洲AV第一页| 国产片免费在线观看| 女人18毛片水真多免费播放| 91高清免费国产自产| 久久免费观看国产99精品|