解決“java.lang.ClassNotFoundException:com.mysql.cj.jdbc.Driver”
1. 概述
Java 資料庫連線 (JDBC) 應用程式介面 (API) 提供了一組類別和介面。我們可以使用它們來開發應用程式來連接到關聯式資料庫等資料來源並處理資料。此外,我們需要一個特定於資料庫的 JDBC 驅動程式來實作此 API 以連接到特定的資料庫。
當使用 JDBC 連接到 MySQL 資料庫時,我們可能會遇到異常訊息java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
。當我們使用先前的、現已棄用的類別com.mysql.jdbc.Driver
時,我們可能會收到訊息java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
。
在本教程中,我們將學習如何解決此異常。除了我們可能已經使用的應用程式開發環境之外,我們不需要任何特殊設定。我們將討論使用 JUnit 5 整合測試和 Apache Maven 作為建置工具來解決此異常。
2. 異常原因
當管理和載入 JDBC 驅動程式的驅動程式管理員服務找不到取得連線所需的驅動程式類別時,我們會收到此異常。該異常只能在運作時發生。我們可以在應用程式中呼叫Class.forName(“com.mysql.cj.jdbc.Driver”)
來請求載入特定的 MySQL JDBC 驅動程式類別;但是,這是不必要的,因為DriverManager
在運行時會自行尋找並載入合適的驅動程式。
但是,當DriverManger
在類別路徑中找不到合適的或要求的驅動程式類別時,它會拋出此異常。類別路徑是 Java 執行時期環境 (JRE) 搜尋類別的目錄路徑。要解決此問題,我們需要將 MySQL Connector/J 二進位檔案或包含 Connector/J 類別的 jar 檔案新增至執行時類別路徑。
3. 範例
獨立應用程式不需要應用程式/Web 伺服器。我們可以透過將MySQL Connector/J的 Maven 依賴項新增至設定檔pom.xml
來修復此例外:
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.33</version>
</dependency>
讓我們使用一個測試類別來檢查錯誤是否已解決。沒有拋出異常,因為我們添加了驅動程式類別並且它被找到並加載:
`public class MySQLLoadDriverUnitTest {
@Test
void givenADriverClass_whenDriverLoaded_thenEnsureNoExceptionThrown() {
assertDoesNotThrow(() -> {
Class.forName("com.mysql.cj.jdbc.Driver");
});
}
}`
4. 結論
在本文中,我們學習如何修復java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
異常問題。我們使用 Maven 專案中開發的 JUnit 5 單元測試來示範將 MySQL Connector/J 新增到執行時類別路徑以修復異常。
與往常一樣,本文中使用的範例腳本可在 GitHub 上取得。