JDBC怎么加載驅動
@author ixenos
分析
1.JDBC是一套連接數據庫的接口(放在java.util.sql.Driver類中),不同的數據庫依此接口各自實現Java連接到數據庫的操作,這些具體的實現就叫做驅動;
2.當只連接一個數據庫時,我們可以new 驅動對象來使用,但是當多數據庫連接時,要多次創建Driver示例,多次創連接Connection,有些繁瑣,這時,sun提供了一個驅動的管理器DriverManager,注冊驅動就可以調用;
3.但是每次還是要創Driver實例,然后都進行注冊,而且可能重復注冊,怎么辦?jdbc驅動的實現者就把新建實例和驅動注冊的操作包裹為一個static塊(在類加載連接初始化時運行,且只運行一次),這樣加載驅動時就執行這些操作了,這也就是為什么只用Class.forName的由來。
com.mysql.jdbc.Driver對加載驅動的實現
com.mysql.jdbc.Driver把DriverManager的注冊放在了靜態塊中
代碼
import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.util.Properties; import org.junit.Test; /** * jdbc連接數據庫 * @author ixenos * */ public class Demo1 { //連接數據庫的URL private String url = "jdbc:mysql://localhost:3306/day17"; // jdbc協議:數據庫子協議:主機:端口/連接的數據庫 // private String user = "root";//用戶名 private String password = "root";//密碼 /** * 第一種方法 * @throws Exception */ @Test public void test1() throws Exception{ //1.創建驅動程序類對象 Driver driver = new com.mysql.jdbc.Driver(); //新版本 //Driver driver = new org.gjt.mm.mysql.Driver(); //舊版本 //設置用戶名和密碼 Properties props = new Properties(); props.setProperty("user", user); props.setProperty("password", password); //2.連接數據庫,返回連接對象 Connection conn = driver.connect(url, props); System.out.println(conn); } /** * 使用驅動管理器類連接數據庫(注冊了兩次,沒必要) * @throws Exception */ @Test public void test2() throws Exception{ Driver driver = new com.mysql.jdbc.Driver(); //Driver driver2 = new com.oracle.jdbc.Driver(); //1.注冊驅動程序(可以注冊多個驅動程序) DriverManager.registerDriver(driver); //DriverManager.registerDriver(driver2); //2.連接到具體的數據庫 Connection conn = DriverManager.getConnection(url, user, password); System.out.println(conn); } /** * (推薦使用這種方式連接數據庫) * 推薦使用加載驅動程序類 來 注冊驅動程序 * @throws Exception */ @Test public void test3() throws Exception{ //Driver driver = new com.mysql.jdbc.Driver(); //通過得到字節碼對象的方式加載靜態代碼塊,從而注冊驅動程序 Class.forName("com.mysql.jdbc.Driver"); //Driver driver2 = new com.oracle.jdbc.Driver(); //1.注冊驅動程序(可以注冊多個驅動程序) //DriverManager.registerDriver(driver); //DriverManager.registerDriver(driver2); //2.連接到具體的數據庫 Connection conn = DriverManager.getConnection(url, user, password); System.out.println(conn); } }