首頁 > 軟體

JDBC獲取資料庫連線由淺入深

2022-02-09 19:01:06

新增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獲取資料庫連線內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com