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

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

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

    konhon

    忘掉過去,展望未來。找回自我,超越自我。
    逃避不一定躲的過, 面對不一定最難過, 孤單不一定不快樂, 得到不一定能長久, 失去不一定不再擁有, 可能因?yàn)槟硞€(gè)理由而傷心難過, 但我卻能找個(gè)理由讓自己快樂.

    Google

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      203 Posts :: 0 Stories :: 61 Comments :: 0 Trackbacks
    全面解析JDBC(三)
    作者:未知?? ??文章來源:www.jspcn.net
    訪問次數(shù): 次????加入時(shí)間:2005-01-19
    JDBC驅(qū)動管理內(nèi)幕是怎么樣的?

      DriverManager 類是 JDBC 的管理層,作用于用戶和驅(qū)動程序之間。它跟蹤可用的驅(qū)動程序,并在數(shù)據(jù)庫和相應(yīng)驅(qū)動程序之間建立連接。另外,DriverManager類也處理諸如驅(qū)動程序登錄時(shí)間限制及登錄和跟蹤消息的顯示等事務(wù)。

      對于簡單的應(yīng)用程序,一般程序員需要在此類中直接使用的唯一方法是DriverManager.getConnection。正如名稱所示,該方法將建立與數(shù)據(jù)庫的連接。JDBC允許用戶調(diào)用DriverManager的方法getDriver、getDrivers和registerDriver及Driver的方法connect。但多數(shù)情況下,讓DriverManager類管理建立連接的細(xì)節(jié)為上策。

      1. 跟蹤可用驅(qū)動程序

      DriverManager類包含一列Driver類,它們已通過調(diào)用方法DriverManager.registerDriver對自己進(jìn)行了注冊。所有Driver類都必須包含有一個(gè)靜態(tài)部分。它創(chuàng)建該類的實(shí)例,然后在加載該實(shí)例時(shí)DriverManager類進(jìn)行注冊。這樣,用戶正常情況下將不會直接調(diào)用DriverManager.registerDriver;而是在加載驅(qū)動程序時(shí)由驅(qū)動程序自動調(diào)用。加載Driver類,然后自動在DriverManager中注冊的方式有兩種:

      (1)調(diào)用方法Class.forName

      這將顯式地加載驅(qū)動程序類。由于這與外部設(shè)置無關(guān),因此推薦使用這種加載驅(qū)動程序的方法。以下代碼加載類acme.db.Driver:Class.forName("acme.db.Driver")。

      如果將acme.db.Driver編寫為加載時(shí)創(chuàng)建實(shí)例,并調(diào)用以該實(shí)例為參數(shù)的DriverManager.registerDriver(本該如此),則它在DriverManager的驅(qū)動程序列表中,并可用于創(chuàng)建連接。

      (2)將驅(qū)動程序添加到Java.lang.System的屬性jdbc.drivers中

      這是一個(gè)由DriverManager類加載的驅(qū)動程序類名的列表,由冒號分隔:初始化DriverManager類時(shí),它搜索系統(tǒng)屬性jdbc.drivers,如果用戶已輸入了一個(gè)或多個(gè)驅(qū)動程序,則DriverManager類將試圖加載它們。以下代碼說明程序員如何在~/.hotJava/properties中輸入三個(gè)驅(qū)動程序類(啟動時(shí),HotJava將把它加載到系統(tǒng)屬性列表中):

      jdbc.drivers=foo.bah.Driver:wombat.sql.Driver:bad.test.ourDriver;

      對DriverManager方法的第一次調(diào)用將自動加載這些驅(qū)動程序類。注意:加載驅(qū)動程序的第二種方法需要持久的預(yù)設(shè)環(huán)境。如果對這一點(diǎn)不能保證,則調(diào)用方法Class.forName顯式地加載每個(gè)驅(qū)動程序就顯得更為安全。這也是引入特定驅(qū)動程序的方法,因?yàn)橐坏〥riverManager類被初始化,它將不再檢查jdbc.drivers屬性列表。

      在以上兩種情況中,新加載的Driver類都要通過調(diào)用DriverManager.registerDriver類進(jìn)行自我注冊。如上所述,加載類時(shí)將自動執(zhí)行這一過程。

      由于安全方面的原因,JDBC管理層將跟蹤哪個(gè)類加載器提供哪個(gè)驅(qū)動程序。這樣,當(dāng)DriverManager類打開連接時(shí),它僅使用本地文件系統(tǒng)或與發(fā)出連接請求的代碼相同的類加載器提供的驅(qū)動程序。

      2. 建立連接

      加載Driver類并在DriverManager類中注冊后,它們即可用來與數(shù)據(jù)庫建立連接。當(dāng)調(diào)用DriverManager.getConnection方法發(fā)出連接請求時(shí),DriverManager將檢查每個(gè)驅(qū)動程序,查看它是否可以建立連接。

      有時(shí)可能有多個(gè)JDBC驅(qū)動程序可以與給定的URL連接。例如,與給定遠(yuǎn)程數(shù)據(jù)庫連接時(shí),可以使用JDBC-ODBC橋驅(qū)動程序、JDBC到通用網(wǎng)絡(luò)協(xié)議驅(qū)動程序或數(shù)據(jù)庫廠商提供的驅(qū)動程序。在這種情況下測試驅(qū)動程序的順序至關(guān)重要,因?yàn)镈riverManager將使用它所找到的第一個(gè)可以成功連接到給定URL的驅(qū)動程序。

      首先DriverManager試圖按注冊的順序使用每個(gè)驅(qū)動程序(jdbc.drivers中列出的驅(qū)動程序總是先注冊)。它將跳過代碼不可信任的驅(qū)動程序,除非加載它們的源與試圖打開連接的代碼的源相同。它通過輪流在每個(gè)驅(qū)動程序上調(diào)用方法Driver.connect,并向它們傳遞用戶開始傳遞給方法DriverManager.getConnection的URL來對驅(qū)動程序進(jìn)行測試,然后連接第一個(gè)認(rèn)出該URL的驅(qū)動程序。這種方法初看起來效率不高,但由于不可能同時(shí)加載數(shù)十個(gè)驅(qū)動程序,因此每次連接實(shí)際只需幾個(gè)過程調(diào)用和字符串比較。

      以下代碼是通常情況下用驅(qū)動程序(例如JDBC-ODBC橋驅(qū)動程序)建立連接所需所有步驟的示例:



    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//加載驅(qū)動程序
    String url = "jdbc:odbc:fred";
    DriverManager.getConnection(url,"userID","passwd");
    posted on 2006-03-22 20:45 konhon 優(yōu)華 閱讀(382) 評論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 亚洲春黄在线观看| 黄网站在线播放视频免费观看| 成人免费无码大片a毛片| 狠狠综合亚洲综合亚洲色| 在线a亚洲v天堂网2019无码| 18成禁人视频免费网站| 免费无码AV一区二区| 亚洲黄色在线观看网站| 国产一区二区免费在线| 国产好大好硬好爽免费不卡| 亚洲日韩精品无码专区加勒比 | 亚洲AV日韩精品久久久久久| 在线看片无码永久免费视频| 亚洲阿v天堂在线2017免费| 亚洲成a人片77777群色| 亚洲午夜精品第一区二区8050| 国产精品久久永久免费| 中文字幕无码免费久久9一区9| 亚洲国产精品综合久久2007| 亚洲一级特黄无码片| 女人18毛片特级一级免费视频| 国产午夜精品免费一区二区三区| 亚洲熟女综合色一区二区三区 | 亚洲一卡2卡3卡4卡5卡6卡| 亚洲国产精品无码久久久蜜芽| 午夜神器成在线人成在线人免费| 久久免费精品视频| 妇女自拍偷自拍亚洲精品| 亚洲男女一区二区三区| 国产亚洲人成无码网在线观看| 日韩高清免费观看| 欧洲精品成人免费视频在线观看| av永久免费网站在线观看| 日韩毛片免费一二三| 亚洲国产午夜精品理论片在线播放| 亚洲专区在线视频| 亚洲女初尝黑人巨高清| 亚洲AV无码之日韩精品| 国产成人免费a在线资源| 久久精品a一国产成人免费网站| 桃子视频在线观看高清免费视频|