MySQL8.0.11 Community Server 與 驅動 mysql-connector-java-8.0.11.jar

Never__GiveUp發表於2020-10-15

1. 遇見問題

MySQL8.0.11 Community Server 與 mysql-connector-java-5.1.37.bin.jar結合使用,程式碼及配置沒有問題,但是下面程式碼無論如何都連結不上資料庫(程式碼在別人那裡可用 MySQL5.xxx 與 mysql-connector-java-5.1.37.bin.jar)

Connection connection = DriverManager.getConnection(url,username,password);

2. 發現

MySQL 8.0 開始資料庫相比常用的 5.X 版本還是有一些變化。

總結一下,想要利用 mysql-connector-java-8.xxx.jar 與 MySQL 8.X 版本建立連線,有以下四個方面與 MySQL 5.X 版本相比發生了變化。

3. 解決方式

1. 驅動的載入方式

mysql-connector-java-5.xxx.jar的載入方式

//第一種(載入兩次驅動,一般情況不會去用了)
DriverManager.registerDriver(new Driver());
//第二種
Class.forName("com.mysql.cj.jdbc.Driver");

mysql-connector-java-8.xxx.jar的載入方式

Class.forName("com.mysql.cj.jdbc.Driver");

2. MySQL 8.0 以上版本不需要建立 SSL 連線的,需要顯式關閉。還需要設定 CST->也就是設定時區。

MySQL 5.7 之前版本,安全性做的並不夠好,比如安裝時生成的root空密碼賬號、存在任何使用者都能連線上的 test 庫等,導致資料庫存在較大的安全隱患。從5.7版本開始MySQL官方對這些問題逐步進行了修復,到了 MySQL 8.0 以上版本已經不需要使用 SSL 進行連線加密了。但是高版本仍然保留了這個介面,所以需要在連線的時候手動寫明是否需要進行 SSL 連線,這裡我們手動關閉 SSL 連線加密就OK。
  
mysql-connector-java-5.xxx.jar的配置方式

//配置檔案
//url=jdbc:資料庫名稱(mysql/Oracle)://資料庫所在機器ip:資料庫埠/資料庫(database)
url=jdbc:mysql://localhost:3306/test
username=root
password=root

//java程式碼
Connection connection = DriverManager.getConnection(url,username,password);

mysql-connector-java-8.xxx.jar的配置方式

//配置檔案
url=jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC
username=root
password=root

//java程式碼
Connection connection = DriverManager.getConnection(url,username,password);
Class.forName("com.mysql.cj.jdbc.Driver");

相關文章