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

Java 連接 MySQL 報錯排查指南:常見原因與解決步驟

     編輯:程式設計疑難解答

問題現象

用戶截圖模糊無法識別具體異常堆棧,但 Java 連接 MySQL 失敗通常集中在以下幾類錯誤。

核心排查清單

  1. 驅動類未找到:ClassNotFoundException: com.mysql.cj.jdbc.Driver
    • 確認已添加 mysql-connector-java 依賴(Maven/Gradle)或 JAR 包放入 classpath
    • 驅動類名:MySQL 8.0+ 用 com.mysql.cj.jdbc.Driver,5.x 用 com.mysql.jdbc.Driver
  2. 連接 URL 格式錯誤:
    // 8.0+ 標準格式(需指定時區)
    jdbc:mysql://localhost:3306/your_db?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    
  3. 用戶名/密錯誤:Access denied for user 'root'@'localhost'
    • 檢查 MySQL 用戶權限:GRANT ALL ON your_db.* TO 'user'@'%' IDENTIFIED BY 'pwd'; FLUSH PRIVILEGES;
    • 確認主機名匹配(localhost vs % vs 具體 IP)
  4. 服務未啟動/端口錯誤:
    • 檢查 MySQL 服務狀態:systemctl status mysqld / services.msc
    • 驗證端口 3306 通達性:telnet host 3306
  5. SSL/TLS 協商失敗(MySQL 8.0 默認開啟 SSL):
    • URL 添加 useSSL=false 或正確配置憑證
  6. 時區問題:serverTimezone=Asia/Shanghai 或 UTC

最小可運行示例

import java.sql.*;

public class JdbcTest {
    static final String URL = "jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=Asia/Shanghai";
    static final String USER = "root";
    static final String PASS = "123456";

    public static void main(String[] args) {
        try (Connection conn = DriverManager.getConnection(URL, USER, PASS)) {
            System.out.println("連接成功!");
            try (Statement st = conn.createStatement();
                 ResultSet rs = st.executeQuery("SELECT VERSION()")) {
                if (rs.next()) System.out.println("MySQL 版本: " + rs.getString(1));
            }
        } catch (SQLException e) {
            e.printStackTrace(); // 關鍵:打印完整堆棧,包含 SQLState、ErrorCode
        }
    }
}

調試技巧

  • 在 catch 塊打印 e.getSQLState()、e.getErrorCode(),對照 MySQL 錯誤碼文檔。
  • 使用數據庫客戶端(Workbench、DBeaver)先驗證賬號/密碼/網絡連通性。
  • 啟用驅動日誌:java -Djavax.net.debug=ssl ... 或 URL 加 logger=com.mysql.cj.log.StandardLogger&profileSQL=true。

總結

遇到連接報錯,請貼出完整異常堆棧文本而非截圖,按上述清單逐項排查,90% 問題可在 5 分鐘內定位解決。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved