try {
// JDBC 操作
} catch (Exception e) {
System.err.println("錯誤類別:" + e.getClass().getName());
System.err.println("錯誤訊息:" + e.getMessage());
e.printStackTrace(); // 開發期建議印完整堆疊
}
| # | 錯誤訊息關鍵字 | 原因 | 解決方案 |
|---|---|---|---|
| 1 | ClassNotFoundException: com.mysql.jdbc.Driver | 驅動類別找不到 | 檢查驅動 JAR 是否在 Classpath;Maven/Gradle 依賴是否正確 |
| 2 | SQLException: No suitable driver | JDBC URL 格式錯誤 | 核對 URL 格式:jdbc:mysql://host:port/dbname?params |
| 3 | Communications link failure ... Connection timed out | IP 錯誤/網路不通/防火牆阻擋 | ping 測試 IP;telnet port 3306;檢查安全群組/防火牆 |
| 4 | Communications link failure ... Connection refused | Port 錯誤/MySQL 服務未啟動 | 確認 my.cnf port 設定;systemctl status mysqld |
| 5 | SQLException: Unknown database 'xxx' | 資料庫不存在 | 建立資料庫或修正 URL 中 DatabaseName |
| 6 | Access denied for user 'xxx'@'host' | 帳號/密碼錯誤/主機權限不足 | 確認帳密;GRANT ALL ON db.* TO 'user'@'%' IDENTIFIED BY 'pwd'; FLUSH PRIVILEGES; |
| 7 | Table 'db.table' doesn't exist | 表名拼寫錯誤/大小寫敏感 | Linux 下表名區分大小寫;用 SHOW TABLES 核對 |
| 8 | Unknown column 'xxx' in 'field list' | 欄位名錯誤 | DESC table 核對欄位名 |
| 9 | Column Index out of range, 4 > 3 | ResultSet 索引超界(1-based) | 檢查 rs.getString(4) 是否超過實際欄數;迴圈用 getMetaData().getColumnCount() |
| 10 | Column count doesn't match value count at row 1 | INSERT 個數與表欄位數不符 | 明確列出欄位:INSERT INTO t(a,b,c) VALUES(?,?,?) |
| 11 | Duplicate entry 'xxx' for key 'PRIMARY' | 主鍵/唯一鍵重複 | 檢查業務邏輯避免重複插入;用 INSERT IGNORE / ON DUPLICATE KEY UPDATE |
| 12 | Data too long for column 'xxx' at row 1 | 資料長度超過欄位定義 | 調整欄位長度 ALTER TABLE t MODIFY col VARCHAR(255) 或截斷資料 |
SET GLOBAL general_log=1; 觀察實際執行 SQL。validationQuery=SELECT 1 防止斷連。serverTimezone=Asia/Taipei 避免時間偏移。useSSL=false(開發環境)或配置憑證。對照錯誤關鍵字 → 定位層面(驅動、網路、認證、SQL、Schema、資料) → 針對性修復。養成印出完整堆疊、記錄實際 SQL習慣,除錯效率提升 80%。