JDBC (Java Database Connectivity) 是 JSP 存取關聯式資料庫的標準 API。本文梳理 JDBC 三大核心能力、ODBC 橋接器與原生驅動兩種連線模式、資料源配置、查詢記錄完整流程,奠定 JSP 資料庫開發基石。
| 模式 | 原理 | 優點 | 缺點 |
|---|---|---|---|
| JDBC-ODBC 橋接器 | JDBC → ODBC 驅動 → DB | 支援幾乎所有有 ODBC 驅動的 DB | 效能較差、需配置 DSN、已被 Java 8 移除 |
| 原生 JDBC 驅動 (Type 4) | JDBC 直連 DB 協議 (純 Java) | 效能最佳、無需客戶端配置、跨平台 | 需各 DB 廠商提供驅動 Jar |
現代專案強制使用原生驅動 (MySQL Connector/J、Oracle ojdbc、PostgreSQL JDBC 等),橋接器僅供維護舊系統參考。
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");<%
// 1. 載入驅動 (JDBC 4.0+ 可省略,自動發現)
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 建立連線
String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8";
Connection conn = DriverManager.getConnection(url, "user", "pass");
// 3. 建立 Statement
Statement stmt = conn.createStatement();
// 4. 執行查詢
ResultSet rs = stmt.executeQuery("SELECT id, name, email FROM users ORDER BY id");
// 5. 處理結果集
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String email = rs.getString("email");
out.println(id + " | " + name + " | " + email + "<br>");
}
// 6. 關閉資源 (逆序關閉,建議用 try-with-resources JDK 7+)
rs.close();
stmt.close();
conn.close();
%>
ps = conn.prepareStatement("SELECT * FROM users WHERE id=?"); ps.setInt(1, uid);conn.setAutoCommit(false); 多條 SQL 視為單一交易,conn.commit()/rollback();try (Connection c = ...; Statement s = c.createStatement(); ResultSet r = s.executeQuery(sql)) { ... }純 JSP + JDBC 易導致業務邏輯與資料存取混雜。建議演進路徑:
掌握 JDBC 核心流程,是理解上層框架運作原理、排查資料庫效能問題的前提。