首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 連接 MySQL 資料庫除錯:善用斷點與除錯器定位問題

     編輯:程式設計疑難解答

常見新手困境

程式碼編譯通過,運行報錯(如 ClassNotFoundException, SQLException, NullPointerException),不知從何下手。

除錯黃金法則:設定斷點 + Debug 模式運行

  1. 在關鍵行設定斷點:
    • Class.forName("com.mysql.jdbc.Driver")(或新驅動 com.mysql.cj.jdbc.Driver)
    • DriverManager.getConnection(url, user, pass)
    • statement.executeQuery(sql)
  2. 啟動 Debug 模式(Eclipse: F11 / IntelliJ: Shift+F9)。
  3. 觀察變數面板:檢查 url, user, pass 是否為預期值;conn 是否為 null。
  4. 單步執行 (F6/F8):精確定位拋出異常的那一行。

常見錯誤與對應檢查

異常檢查重點
ClassNotFoundException驅動 JAR 是否在 Classpath / Maven 依賴 / WEB-INF/lib
SQLException: Communications link failureIP、Port、防火牆、MySQL bind-address、skip-networking
SQLException: Access denied帳號/密碼、主機權限 (user@'%')、密碼插件 (caching_sha2_password)
NullPointerExceptionconn 未初始化即使用、ResultSet 未 next() 即 getXxx()

最小可測試程式

public class TestMySQL {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC";
        String user = "root";
        String pass = "123456";
        try (Connection conn = DriverManager.getConnection(url, user, pass)) {
            System.out.println("連線成功!");
            try (Statement stmt = conn.createStatement();
                 ResultSet rs = stmt.executeQuery("SELECT VERSION()")) {
                if (rs.next()) System.out.println("MySQL 版本: " + rs.getString(1));
            }
        } catch (Exception e) {
            e.printStackTrace(); // 完整堆疊最關鍵
        }
    }
}

給新手的建議

  • 先跑通最小測試程式,確認環境無誤,再整合到專案。
  • 學會閱讀堆疊追蹤:從最下面的 Caused by 向上看,找到根因。
  • 善用 IDE 的 Evaluate Expression (Alt+F8) 在除錯時即時執行片段程式碼驗證假設。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved