Jdbc注冊驅動的三種方式 (轉)


關於驅動包

 

 

jdbc中注冊驅動,首先導入對應的包,例如mysql-connector-java-5.0.8-bin.jar。驅動包是java和具體數據庫之間的連接橋梁,由數據庫廠商開發。每一種數據庫對應一款驅動jar,甚至每一個版本的數據庫都有自己對應版本的驅動jar。 

 

關於java.sqlDriverManger

 

 

Java的驅動管理類。管理一組 JDBC 驅動程序。

javax.sql.DataSource 接口是 JDBC 2.0 API 中的新增內容,它提供了連接到數據源的另一種方法。使用 DataSource 對象是連接到數據源的首選方法。

更深的理解請參見java 文檔。

 

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");( 關於這句代碼的進一步理解請參看另一篇文章《從Class.forName()到類的裝載機制》)

推薦這種方式,不會對具體的驅動類產生依賴(就是不用import package。 
其實這個只是把com.mysql.jdbc.Driver.class這個類裝載進去,但是關鍵就在於,在 
這個類中,有個靜態塊,如下: 
static{ 
   try{ 
java.sql.DriverManager.registerDriver(new Driver()); 
}catch(SQLException e){ 
   throw new RuntimeException("can't register driver!"); 


就是因為這個代碼塊,讓類在加載的時候就把驅動注冊進去了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM