JDBC - 獲取資料庫連線
阿新 • • 發佈:2020-10-20
要素一: Driver介面實現類
Driver介面介紹
- java.sql.Driver是所有JDBC驅動程式需要實現的介面。這個介面是提供給資料庫廠商使用的, 不同資料庫廠商提供不同的實現。
- 在程式中不需要直接去訪問實現了Driver介面的類, 而是由驅動程式管理器類(java.sql.DriverManager)去呼叫這些Driver實現
- Oracle的驅動: oracler.jdbc.driver.OracleDriver
- MySQL的驅動: com.mysql.jdbc.Driver
載入與註冊驅動
- 載入驅動: 載入JDBC驅動需要呼叫Class類的靜態方法forName(), 向其傳遞要載入的JDBC驅動的類名
Class.forName("com.mysql.jdbc.Driver")
- 註冊驅動: DriverManager類是驅動程式管理器類, 負責管理驅動程式
- 使用DriverManage.registerDriver(com.mysql.jdbc.Driver)來註冊驅動
- 通常不用顯式呼叫DriverManager類的registerDriver方法來註冊驅動程式類的例項, 因為Driver介面的驅動程式類都包含了靜態程式碼塊, 在這個靜態程式碼塊中, 會呼叫DriverManager.registerDriver()方法來註冊自身的一個例項,
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
public Driver() throws SQLException {
}
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
}
要素二: URL
- JDBC URL用於標識一個用於被註冊的驅動程式, 驅動程式管理器用這個URL選擇正確的驅動程式, 從而建立到資料庫的連線
- JDBC URL的標準由三部分組成, 各部分之間用冒號分隔
- jdbc:子協議:子名稱
- 協議: JDBC URL中的協議總是jdbc
- 子協議: 子協議用於標識一個數據庫驅動程式
- 子名稱: 一種標識資料庫的方法, 子名稱可以依不同的子協議而變化, 用子名稱的目的是為了定位資料庫提供足夠的資訊, 包含主機名(對應服務端的ip地址)、埠號、資料庫名
jdbc:mysql://localhost:3306/test
- 幾種常用資料庫的JDBC URL
- MySQL的連線URL編寫方式
- jdbc:mysql://主機名稱:服務埠號/資料庫名稱?引數=值&引數=值
- jdbc:mysql://localhost:3306/test
- jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8(如果JDBC程式與服務端的字符集不一樣, 會導致亂碼, 那麼可以通過引數指定伺服器的字符集)
- jdbc:mysql://localhost:3396/test?user=root&password=123456
- MySQL的連線URL編寫方式
-
-
jdbc:oracle:thin:@主機名稱:oracle服務埠號:資料庫名稱
-
jdbc:oracle:thin:@localhost:1521:test
-
-
SQLServer的連線URL編寫方式:
-
jdbc:sqlserver://主機名稱:sqlserver服務埠號:DatabaseName=資料庫名稱
-
-
資料庫連線方式
連線方式一
// 方式一 @Test public void testConnection1() throws SQLException { // 獲取Driver的實現類物件 Driver driver = new com.mysql.jdbc.Driver(); // jdbc:mysql - 協議 // localhost - ip地址 // 3306 - 預設mysql的埠號 // test - 資料庫名 String url = "jdbc:mysql://localhost:3306/test"; // 將使用者名稱和密碼封裝在Properties中 Properties info = new Properties(); info.setProperty("user", "root"); info.setProperty("password", "nicaia..."); Connection connection = driver.connect(url, info); System.out.println(connection); }
連線方式二
// 方式二: 對方式一的迭代 // 目的: 在如下的程式中, 不出現第三方的api, 使得程式具有更好的移植性 @Test public void testConnection2() throws Exception { // 1. 獲取Driver的實現類物件: 使用反射 Class classzz = Class.forName("com.mysql.jdbc.Driver"); Driver driver = (Driver) classzz.getConstructor().newInstance(); // 2. 提供要連線的資料庫 String url = "jdbc:mysql://localhost:3306/test"; // 3. 提供連線需要的使用者名稱和密碼 Properties info = new Properties(); info.setProperty("user", "root"); info.setProperty("password", "nicaia..."); // 4. 獲取連線 Connection connection = driver.connect(url, info); System.out.println(connection); }
連線方式三
// 方式三: 使用DriverManager替代Driver @Test public void testConnection3() throws Exception { // 1. 獲取Driver的實現類物件 Class classzz = Class.forName("com.mysql.jdbc.Driver"); Driver driver = (Driver) classzz.getDeclaredConstructor().newInstance(); // 3. 提供另外三個連線的基本資訊 String url = "jdbc:mysql://localhost:3306/test"; String user = "root"; String password = "nicaia..."; // 註冊 DriverManager.registerDriver(driver); // 獲取連線 Connection connection = DriverManager.getConnection(url, user, password); System.out.println(connection); }
連線方式四
// 方式四: 優化, 可以只加載驅動, 不用顯式的去註冊驅動 @Test public void testConnect4() throws Exception { // 1. 提供三個連線的基本資訊 String url = "jdbc:mysql://localhost:3306/test"; String user = "root"; String password = "nicaia..."; // 2. 載入Driver Class.forName("com.mysql.jdbc.Driver"); // Driver driver = (Driver) classzz.getDeclaredConstructor().newInstance(); // // 註冊驅動 // DriverManager.registerDriver(driver); // 3. 獲取連線 Connection connection = DriverManager.getConnection(url, user, password); System.out.println(connection); }
連線方式五
@Test public void testConnect5() throws Exception { // 1. 讀取配置檔案中4個基本資訊 InputStream inputStream = Connection.class.getClassLoader().getResourceAsStream("jdbc.properties"); Properties properties = new Properties(); properties.load(inputStream); String user = properties.getProperty("user"); String password = properties.getProperty("password"); String url = properties.getProperty("url"); String driverClass = properties.getProperty("driverClass"); // 2. 載入驅動 Class.forName(driverClass); // 3. 獲取連線 Connection connection = DriverManager.getConnection(url, user, password); System.out.println(connection); } }
其中,配置檔案宣告在工程的src目錄下:【jdbc.properties】
user=root password=123456 url=jdbc:mysql://localhost:3306/test driverClass=com.mysql.jdbc.Driver
說明:使用配置檔案的方式儲存配置資訊,在程式碼中載入配置檔案
使用配置檔案的好處:
①實現了程式碼和資料的分離,如果需要修改配置資訊,直接在配置檔案中修改,不需要深入程式碼 ②如果修改了配置資訊,省去重新編譯的過程。