JDBC獲取數據庫連接由淺入深
添加MySQL驅動:
不同的數據庫廠商都會有自己的實現java.sql.Driver接口的驅動程序,例如mysql的實現就是com.mysql.jdbc.Driver,將mysql-connector-java-版本號-bin.jar添加到相應工程的目錄(如果是動態web項目的話,需要將對應的jar包放到WebRoot目錄下)下面,右鍵選擇add as library就完成瞭(如果是使用的eclipse,則是點擊build path)。
在mysql8.0之後驅動程序的全路徑應該是com.mysql.cj.jdbc.Driver,使用原來的路徑也可以正確運行,隻是運行時會在終端輸出一段推薦使用新路徑的紅色文字
獲取連接:
Driver
獲取連接之前。首先需要創建驅動類的對象,通過驅動類的connect()方法即可獲取數據庫連接。connect()方法的參數如下所示:
Connection connect(String url, java.util.Properties info)
其中url是用來標識一個驅動程序,而驅動程序管理器就是通過url來選擇正確的驅動程序。url的格式為:jdbc:子協議:子名稱。
jdbc是JDBC url中的協議,而且在JDBC中協議恒為jdbc
子協議:用於標識一個數據庫驅動程序,MySQL就是mysql。
子名稱:同來標識數據庫,格式為 主機名:端口號/數據庫名
例:jdbc:mysql://localhost:3306/databasename
Properties類型的info則是用來提供數據庫的用戶名(user)和密碼(password)
綜上所述,我們可以將獲取連接分為四步,分別是:
實例化Driver類
提供url
通過Properties提供用戶名和密碼
調用Driver類的connect()方法獲取連接
具體實現代碼為:
@Test public void testConnection(){ try { //提供驅動接口類的實現對象 Driver driver = null; driver = new com.mysql.cj.jdbc.Driver(); //url,指明具體要操作的數據 String url = "jdbc:mysql://localhost:3306/test"; //指明用戶名和密碼 Properties pros = new Properties(); pros.setProperty("user", "root"); pros.setProperty("password", "root"); //通過Driver中的connect()方法獲取連接 Connection connect = driver.connect(url, pros); System.out.println(connect); } catch (SQLException e) { e.printStackTrace(); } }
使用以上的代碼有一個缺點就是在代碼中使用瞭第三方的API,我們可以通過反射的方式來創建驅動類的對象,改進後的代碼為:
@Test public void testConnection(){ try { //實例化Driver String className = "com.mysql.cj.jdbc.Driver"; Class cls = Class.forName(className); Driver driver = (Driver)cls.newInstance(); //url,指明具體要操作的數據 String url = "jdbc:mysql://localhost:3306/test"; //指明用戶名和密碼 Properties pros = new Properties(); pros.setProperty("user", "root"); pros.setProperty("password", "root"); //通過Driver中的connect()方法獲取連接 Connection connect = driver.connect(url, pros); System.out.println(connect); } catch (SQLException e) { e.printStackTrace(); } }
DriverManager
通過DriverManager的getConnection()方法來獲取連接,首先看一下該方法的參數詳情:
public static Connection getConnection(String url,String user, String password)
通過該方法的三個參數再加上驅動的具體路徑,我們可以得知通過這種方法獲取數據庫連接的四個要素分別為:
url
用戶名
密碼
驅動路徑
所以現在獲取連接的步驟應該為:
給明獲取數據庫連接的四要素
實例化Driver
註冊驅動
獲取連接
具體代碼為:
@Test public void testConnection(){ try { //給出數據庫連接的四個基本要素 String url = "jdbc:mysql://127.0.0.1:3306/test"; String driverName = "com.mysql.cj.jdbc.Driver"; String user = "root"; String password = "root"; //實例化Driver Class cls = Class.forName(driverName); Driver driver = (Driver)cls.newInstance(); //註冊驅動 DriverManager.registerDriver(driver); //獲取連接 Connection connection = DriverManager.getConnection(url, user, password); System.out.println(connection); } catch (Exception e) { e.printStackTrace(); } }
但是以上的方式任然可以簡化,我們先來看com.mysql.cj.jdbc.Driver的具體實現:
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!"); } } }
可以看到在Driver類中有一個靜態代碼塊中有註冊驅動的那一步,所以在實例化Driver類的時候同時就將驅動註冊瞭,所以以上代碼中註冊驅動的代碼可以刪掉。
通過配置文件配合DriverManager獲取連接
我們可以將獲取數據庫連接的四大要素寫在配置文件中,首先創建配置文件jdbc.properties,其中內容為:
user=root password=root url=jdbc:mysql://localhost:3306/test driverName=com.mysql.cj.jdbc.Driver
通過讀取配置文件中的信息獲得四要素,從而獲取連接,最終版的代碼為:
@Test public void testConnection5(){ try { //加載配置文件 //最終版配合配置文件使用 Properties pros = new Properties(); InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties"); pros.load(is); //讀取配置信息 String user = pros.getProperty("user"); String password = pros.getProperty("password"); String url = pros.getProperty("url"); String driverName = pros.getProperty("driverName"); //加載驅動 Class.forName(driverName); //獲取連接 Connection connection = DriverManager.getConnection(url, user, password); System.out.println(connection); } catch (Exception e) { e.printStackTrace(); } }
通過這種方式獲取數據庫的連接時,如果需要修改用戶名密碼,驅動類或者操作的數據庫時就不再需要修改代碼,隻需要修改配置文件中的各項的值即可實現更改。
到此這篇關於JDBC獲取數據庫連接由淺入深的文章就介紹到這瞭,更多相關JDBC獲取數據庫連接內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- JDBC核心技術詳解
- Java DriverManager.getConnection()獲取數據庫連接
- JDBC以反射機制加載類註冊驅動連接MySQL
- Java中JDBC的使用教程詳解
- 詳細說明關於Java的數據庫連接(JDBC)