JDBC-ODBC Bridge(sun.jdbc.odbc.JdbcOdbcDriver)是早期 Java 連接 ODBC 資料來源(如 Access、SQL Server、舊版 MySQL)的橋接方案。注意:Java 8 起已移除此驅動程式,現代專案請使用各資料庫原生 JDBC 驅動。本文僅供維護舊系統參考。
ODBC 連線屬性中,charSet 參數指定字符編碼,常見值:
gb2312 / GBK:簡體中文big5:繁體中文utf-8:Unicode(視 ODBC 驅動支援度而定)import java.sql.*;
import java.util.Properties;
public class OdbcCharsetDemo {
public static void main(String[] args) {
if (args.length == 0) {
System.out.println("用法: java OdbcCharsetDemo \"SQL 陳述式\"");
return;
}
try {
// 1. 載入驅動
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// 2. 設定連線屬性(關鍵:charSet)
Properties props = new Properties();
props.put("user", ""); // 使用者名稱
props.put("password", ""); // 密碼
props.put("charSet", "gb2312"); // 字符集設定!
// 3. 建立連線("chinese" 為 ODBC 系統 DSN 名稱)
Connection conn = DriverManager.getConnection("jdbc:odbc:chinese", props);
// 4. 執行 SQL
Statement stmt = conn.createStatement();
stmt.execute(args[0]); // 傳入的 SQL 陳述式
System.out.println("執行成功");
} catch (ClassNotFoundException e) {
System.err.println("找不到 JDBC-ODBC Bridge 驅動,Java 8+ 已移除");
} catch (SQLException e) {
e.printStackTrace();
System.err.println("SQL 錯誤碼: " + e.getErrorCode());
}
}
}
odbcad32.exe)chineseprops.put("charSet", "GBK") 或 utf-8| 資料庫 | 原生 JDBC 驅動 | Maven 坐標 |
|---|---|---|
| MySQL | com.mysql.cj.jdbc.Driver | mysql:mysql-connector-j:8.0.33 |
| PostgreSQL | org.postgresql.Driver | org.postgresql:postgresql:42.6.0 |
| SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver | com.microsoft.sqlserver:mssql-jdbc:12.4.2 |
| Oracle | oracle.jdbc.OracleDriver | com.oracle.database.jdbc:ojdbc11:23.4.0.0 |
| Access (UCanAccess) | net.ucanaccess.jdbc.UcanaccessDriver | com.healthmarketscience.jackcess:jackcess:4.0.4 |
原生驅動連線字串範例(MySQL):
jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Taipei
JDBC-ODBC Bridge 透過 Properties.put("charSet", "編碼") 設定字符集。但此技術已淘汰,新專案請直接使用資料庫原生 JDBC 驅動,在連線 URL 中指定 characterEncoding 參數,並確保資料庫、連線、應用程式全鏈路編碼一致(建議 UTF-8)。