JDBC的總結(1)----註冊驅動

考量了許久,決定把最近學的jdbc坐下總結,慢慢來吧,一天總結一小點,既然拖了那麼久。

好,下面開始總結。(這裏以mysql數據庫爲例)

首先就要說的是jdbc中註冊驅動,首先導入對應的包,例如mysql-connector-java-5.0.8-bin.jar。

DiverManager.class裏有個屬性drivers,它實際上是一個vector。可在列表中加入很多驅動,當DriverManager去取連接的時候,若果drivers裏有很多驅動,它會把drivers裏面的各個驅動的url和創建連接時傳進來的url逐一比較,遇到對應的url,則建立連接。

註冊驅動有三種方式:

(一)DriverManager.registerDriver(new com.mysql.jdbc.Driver());
會造成DriverManager中產生兩個一樣的驅動,並會對具體的驅動類產生依賴。
具體來說就是:
1,加載的時候註冊一次驅動(原因請看第三點),實例化的時候又註冊一次。所以兩次。
2,由於實例化了com.mysql.jdbc.Driver.class,導致必須導入該類(說白了,就是要把這個類import進去),從而具體驅動產生了依賴。不方便擴展代碼。

(二)System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver");
如果要註冊多個驅動,則System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver:com.oracle.jdbc.Driver");
雖然不會對具體的驅動類產生依賴;但註冊不太方便,所以很少使用。


(三)Class.forName("com.mysql.jdbc.Driver");
推薦這種方式,不會對具體的驅動類產生依賴。
其實這個只是把com.mysql.jdbc.Driver.class這個類裝載進去,但是關鍵就在於,在
這個類中,有個靜態塊,如下:
static{
try{
java.sql.DriverManager.registerDriver(new Driver());
}catch(SQLException e){
throw new RuntimeException("can't register driver!");
}
}
就是因爲這個代碼塊,讓類在加載的時候就把驅動註冊進去了!(繞了半天的圈子,其實就是爲了說明這個問題,累啊!)

寫了一下,自己有那麼點提高,但是真的很花時間啊,堅持!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章