java learnging

          一塊探討JAVA的奧妙吧
          posts - 34, comments - 27, trackbacks - 0, articles - 22

          JDBC驅(qū)動(dòng)程序

          JDBC通過(guò)一系列接口來(lái)訪問(wèn)數(shù)據(jù)庫(kù),而這些接口的實(shí)現(xiàn)則是由不同的數(shù)據(jù)庫(kù)廠商或組織實(shí)現(xiàn)的。要實(shí)現(xiàn)對(duì)某一特定類型數(shù)據(jù)庫(kù)的訪問(wèn)就要通過(guò)注冊(cè)JDBC驅(qū)動(dòng)程序來(lái)讓程序知道去哪里調(diào)用JDBC API 接口的實(shí)現(xiàn)。

          先看下面的一段程序:

          Class.froName("com.mysql.jdbc.Driver").newInstance();//加載類并初始化這個(gè)類的靜態(tài)初始化部分
          String url = "jdbc:mysql://localhost:3306/math";               //數(shù)據(jù)庫(kù)URL
          String userName = "root";                                                     //連接數(shù)據(jù)庫(kù)的用戶名
          String password = "password";                                            //密碼
          Connection oConn = DriverManager.getConnection(url,userName,password);//建立數(shù)據(jù)庫(kù)連接

          java.sql.DriverManager:從名字就可以看出是用于驅(qū)動(dòng)程序管理的,它的主要責(zé)任是保留一個(gè)驅(qū)動(dòng)程序的列表,并通過(guò)getConnection方法來(lái)給應(yīng)用程序提供與所請(qǐng)求的URL相匹配的Driver(可能是由于同一個(gè)數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序可能是有幾種不同的實(shí)現(xiàn)方式,但如果DriverManager中對(duì)一個(gè)URL有多個(gè)匹配的Driver,它是不是只選擇第一個(gè)找到的呢?),并返回Connection對(duì)象,如果找不到就會(huì)拋出一個(gè)異常,也就是這一句 Connection oConn = DriverManager.getConnection(url,userName,password)。同時(shí)還提供了registerDriver()和deregisterDriver(),這兩個(gè)方法允許驅(qū)動(dòng)程序的工具用DriverManager注冊(cè)驅(qū)動(dòng)程序或從列表中刪除。可以感覺(jué)出是在用Class.froName("com.mysql.jdbc.Driver").newInstance();加載類并初始化這個(gè)類的靜態(tài)初始化部分時(shí)調(diào)用registerDriver()的方法注冊(cè)的,我在mysql驅(qū)動(dòng)程序的源碼的Driver類中找到對(duì)這個(gè)方法的調(diào)用。

          package com.mysql.jdbc;
          public class Driver extends NonRegisteringDriver 
          {
            

              
          //

              
          // Register ourselves with the DriverManager
              
          //
              static 
          {
                  
          try 
          {
                      java.sql.DriverManager.registerDriver(
          new
           Driver());
                  }
           catch (java.sql.SQLException E) {
                      
          throw new RuntimeException("Can't register driver!"
          );
                  }


                  
          if (DEBUG) {
                      Debug.trace(
          "ALL"
          );
                  }

              }


              
          /**
               * Construct a new driver and register it with DriverManager
               *
               * @throws java.sql.SQLException if a database error occurs.
               
          */

              
          public Driver() throws java.sql.SQLException {
                  
          // Required for Class.forName().newInstance()

              }

          }

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 广丰县| 新邵县| 甘德县| 五莲县| 神农架林区| 桃源县| 白山市| 会同县| 临夏县| 崇信县| 淄博市| 出国| 麟游县| 海安县| 寿宁县| 巴林右旗| 吉安县| 淮阳县| 祁阳县| 繁昌县| 桐庐县| 深泽县| 延长县| 即墨市| 灵丘县| 宜良县| 增城市| 新干县| 延长县| 海伦市| 万山特区| 大丰市| 大荔县| 读书| 光泽县| 涟源市| 电白县| 得荣县| 勐海县| 昭通市| 扶绥县|