新手調試網站後台登入程式時,IDE 提示「無法解析導入 com.mysql.jdbc.ResultSet」,通常是因為手動導入了 MySQL JDBC 驅動 JAR 的內部類別,而非使用標準 JDBC API (java.sql.ResultSet)。
錯誤代碼
import com.mysql.jdbc.ResultSet; // 錯誤!這是驅動實現類,不應直接依賴
// ...
ResultSet rs = stmt.executeQuery(sql);
正確導入
import java.sql.ResultSet; // 標準 JDBC 介面
import java.sql.Statement;
import java.sql.Connection;
// ...
ResultSet rs = stmt.executeQuery(sql); // 多型:實際執行時為驅動實現類實例
根本原因
- JDBC 設計模式:應用程式只依賴
java.sql.* 介面,具體實現由驅動廠商提供(com.mysql.jdbc.* 或 com.mysql.cj.jdbc.* 8.0+)。
- 直接導入實現類會導致:
① 程式鎖定特定驅動版本,升級驅動即編譯報錯。
② 違反「面向介面編程」原則。
③ 模組化(Java 9+)下驅動內部類別不再導出,編譯直接失敗。
驅動版本對應關係
| MySQL 版本 | 驅動類別前綴 | Maven 坐標 (範例) |
| 5.x / 早期 8.x | com.mysql.jdbc | mysql:mysql-connector-java:5.1.49 |
| 8.0.13+ | com.mysql.cj.jdbc | mysql:mysql-connector-java:8.0.33 |
無論驅動版本,應用程式永遠只導入 java.sql.*。
Maven 依賴範例
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version> <!-- 或 5.1.49 -->
</dependency>
常見伴隨問題
ClassNotFoundException: com.mysql.jdbc.Driver:驅動 JAR 未放入 classpath(Maven 未生效、WEB-INF/lib 缺失)。
Communications link failure:連線參數錯誤(host/port)、防火牆、MySQL bind-address 設定。
Public Key Retrieval is not allowed:MySQL 8.0+ 預設需 SSL,連線字串加 ?useSSL=false&allowPublicKeyRetrieval=true(僅開發環境)。
堅持使用標準 JDBC API 介面,是 Java 資料庫程式可移植、可維護的基石。
- 上一篇文章: 財經數據平台數據來源揭秘:大智慧、雪球、東方財富的數據從哪來?
- 下一篇文章: .NET 整合 Windows Azure Blob 儲存服務完整指南
Copyright ©
程式碼之家 All Rights Reserved