一、Driver接口介紹
java.sql.Driver接口是所有jdbc驅動程式實作的接口,這個接口是供給資料廠商使用的,不同的資料庫廠商提供不同的實作。
在程式當中不需要直接去通路實作了 Driver 接口的類,而是由驅動程式管理器類(java.sql.DriverManager)去掉這些Driver實作。
mySql的驅動: com.mysql.jdbc.Driver
2.加載與注冊JDBC驅動
- 加載驅動:加載JDBC的的驅動需要調用 Class類的靜态方式 forName(),向其傳遞JDBC的驅動類名
Class.forName("com.mysql.jdbc.Driver");
- 注冊驅動: DriverManager類是驅動程管理類,負責管理驅動程式
DriverManager.registerDriver("com.mysql.jdbc.Driver");
通常不用顯式調用 DriverManager 類的 registerDriver() 方法來注冊驅動程式類的執行個體,因為 Driver
接口的驅動程式類都包含了靜态代碼塊,在這個靜态代碼塊中,會調DriverManager.registerDriver()
方法來注冊自身的一個執行個體。下圖是MySQL的Driver實作類的源碼:
二、url
jdbc url用于辨別一個被注冊的驅動程式,驅動程式管理器通過這個url選擇正确的驅動程式進而建立到資料庫的連接配接。
JDBC URL的标準由三部分組成,各部分間用冒号分隔。
jdbc: 子協定:子名稱
協定: JDBC URL中的協定總是jdbc
子協定: 子協定用于辨別一個數
子名稱: 一種辨別資料庫的方法。子名稱可以依不同的子協定而變化,用子名稱的目的是為了定位資料庫提供足夠的 資訊。包含主機名(對應服務端的ip位址),端口号,資料庫名
三、使用者名和密碼
user,password可以用“屬性名=屬性值”方式告訴資料庫
可以調用 DriverManager 類的 getConnection() 方法建立到資料庫的連接配接
四、資料庫連接配接方式
連接配接方式一: 使用DriverManager實作資料庫的連接配接。體會擷取連接配接必要的4個基本要素(主講)
//第一種方式
public static void DBConnection1(){
//1.資料庫連接配接的4個基本要素:
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "abc123";
String driverName = "com.mysql.jdbc.Driver";
try {
//2.執行個體化Driver
Class clazz = Class.forName(driverName);
Driver driver = (Driver) clazz.newInstance();
//3.注冊驅動
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
連接配接方式二: 下面代碼中顯式出現了第三方資料庫的API
//第一種方式
public static void DBConnection1(){
try {
//1.提供java.sql.Driver接口實作類的對象
Driver driver = null;
driver = new com.mysql.jdbc.Driver();
//2.提供url,指明具體操作的資料
String url = "jdbc:mysql://localhost:3306/test";
//3.提供Properties的對象,指明使用者名和密碼
Properties info = new Properties();
info.setProperty("user", "root");
info.setProperty("password", "abc123");
//4.調用driver的connect(),擷取連接配接
Connection conn = driver.connect(url, info);
System.out.println(conn);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
連接配接方式三: 相較于方式二,這裡使用反射執行個體化Driver,不在代碼中展現第三方資料庫的API。展現了面向接口程式設計思想。
//第一種方式
public static void DBConnection1(){
try {
//1.執行個體化Driver
String className = "com.mysql.jdbc.Driver";
Class clazz = Class.forName(className);
Driver driver = (Driver) clazz.newInstance();
//2.提供url,指明具體操作的資料
String url = "jdbc:mysql://localhost:3306/test";
//3.提供Properties的對象,指明使用者名和密碼
Properties info = new Properties();
info.setProperty("user", "root");
info.setProperty("password", "abc123");
//4.調用driver的connect(),擷取連接配接
Connection conn = driver.connect(url, info);
System.out.println(conn);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
連接配接方式四: 說明:不必顯式的注冊驅動了。因為在DriverManager的源碼中已經存在靜态代碼塊,實作了驅動的注冊。
public static void DBConnection1(){
try {
//1.資料庫連接配接的4個基本要素:
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "abc123";
String driverName = "com.mysql.jdbc.Driver";
//2.加載驅動 (①執行個體化Driver ②注冊驅動)
Class.forName(driverName);
//3.擷取連接配接
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
連接配接方式五:
public static void DBConnection1(){
//1.加載配置檔案
InputStream is =ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties pros = new Properties();
pros.load(is);
//2.讀取配置資訊
String user = pros.getProperty("user");
String password = pros.getProperty("password");
String url = pros.getProperty("url");
String driverClass = pros.getProperty("driverClass");
//3.加載驅動
Class.forName(driverClass);
//4.擷取連接配接
Connection conn = DriverManager.getConnection(url,user,password);
}
其中,配置檔案聲明在工程的src目錄下:【jdbc.properties】
user=root
password=abc123
url=jdbc:mysql://localhost:3306/test
driverClass=com.mysql.jdbc.Driver
說明:使用配置檔案的方式儲存配置資訊,在代碼中加載配置檔案 使用配置檔案的好處:
①實作了代碼和資料的分離,如果需要修改配置資訊,直接在配置檔案中修改,不需要深入代碼
②如果修改了 配置資訊,省去重新編譯的過程。