早期 MySQL Connector/J 使用 org.gjt.mm.mysql.Driver,後統一為 com.mysql.jdbc.Driver (5.0+) 並在 8.0 進一步變更為 com.mysql.cj.jdbc.Driver。本文釐清三代驅動類名關係、兼容性策略與測試代碼驗證。
| 版本時期 | 驅動類全名 | Jar 檔案特徵 | 狀態 |
|---|---|---|---|
| MySQL Connector/J 3.0/3.1 (早期) | org.gjt.mm.mysql.Driver | mm.mysql-2.0.x.jar | 已停止維護 |
| Connector/J 5.0 ~ 5.1 (主流長期版本) | com.mysql.jdbc.Driver | mysql-connector-java-5.1.x.jar | 廣泛使用,支援至 5.1.49 |
| Connector/J 6.0/8.0 (現代版本) | com.mysql.cj.jdbc.Driver | mysql-connector-java-8.0.x.jar | 當前推薦,Java 8+ 原生支援 |
org.gjt.mm.mysql.Driver 在 5.1 版本中**保留為類別別名**,委派給 com.mysql.jdbc.Driver,確保舊代碼零修改升級com.mysql.jdbc.Driver (5.1) 或 com.mysql.cj.jdbc.Driver (8.0+)package com.evan.jdbc.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class JDBCDriverTest {
public static void main(String[] args) throws Exception {
String url = "jdbc:mysql://localhost:3306/evan";
String username = "root";
String password = "root";
String sql = "SELECT * FROM user";
// 測試舊驅動類名
// String className = "org.gjt.mm.mysql.Driver";
// 測試新驅動類名 (推薦)
String className = "com.mysql.jdbc.Driver";
Class.forName(className);
try (Connection conn = DriverManager.getConnection(url, username, password);
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
System.out.println("user表裡面有值: " + rs.getString("name"));
}
}
}
}
mysql
mysql-connector-java
5.1.49
com.mysql
mysql-connector-j
8.0.33
注意:8.0 版本 Group ID 變更為 com.mysql,Artifact ID 為 mysql-connector-j,驅動類為 com.mysql.cj.jdbc.Driver。
com.mysql.cj.jdbc.DriveruseSSL=true、serverTimezone 建議顯式指定mysql-connector-java 依賴理解驅動演進脈絡,避免在舊專案中盲目保留 org.gjt.mm.mysql.Driver,新專務必採用現代驅動類名,享受效能優化、安全修復與新功能支援。