JDBC (Java Database Connectivity) 是 Java 存取關聯式資料庫的標準 API。本文涵蓋環境建置、驅動管理、連線建立、SQL 執行、資料表建立的完整入門流程,並以「咖啡店」範例資料庫貫穿始終。
// MySQL 範例
Class.forName("com.mysql.cj.jdbc.Driver");
// PostgreSQL
Class.forName("org.postgresql.Driver");
// Oracle
Class.forName("oracle.jdbc.OracleDriver");
// JDBC-ODBC Bridge (已移除於 JDK 8+)
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Class.forName() 會觸發靜態初始化區塊,驅動自動向 `DriverManager` 註冊。**無需手動 `new Driver()`**。
String url = "jdbc:mysql://localhost:3306/coffeebreak?useSSL=false&serverTimezone=UTC";
String user = "root";
String pass = "password";
Connection conn = DriverManager.getConnection(url, user, pass);
URL 格式:`jdbc:
CREATE TABLE COFFEES (
COF_NAME VARCHAR(32) PRIMARY KEY, -- 咖啡名稱 (PK)
SUP_ID INTEGER, -- 供應商 ID (FK)
PRICE FLOAT, -- 價格
SALES INTEGER, -- 本週銷售磅數
TOTAL INTEGER -- 累計銷售磅數
);
CREATE TABLE SUPPLIERS (
SUP_ID INTEGER PRIMARY KEY, -- 供應商 ID (PK)
SUP_NAME VARCHAR(40), -- 名稱
STREET VARCHAR(40), -- 街道
CITY VARCHAR(20), -- 城市
STATE VARCHAR(20), -- 州/省
ZIP VARCHAR(10) -- 郵遞區號
);
關聯: `COFFEES.SUP_ID` 參照 `SUPPLIERS.SUP_ID` (外鍵)。同一供應商可提供多種咖啡。
String createCoffees = "CREATE TABLE COFFEES " +
"(COF_NAME VARCHAR(32), " +
"SUP_ID INTEGER, " +
"PRICE FLOAT, " +
"SALES INTEGER, " +
"TOTAL INTEGER)";
try (Connection conn = DriverManager.getConnection(url, user, pass);
Statement stmt = conn.createStatement()) {
stmt.executeUpdate(createCoffees);
System.out.println("COFFEES table created.");
} catch (SQLException e) {
e.printStackTrace();
}
| 介面 | 用途 | 關鍵方法 |
|---|---|---|
Statement | 靜態 SQL、DDL | `executeUpdate(sql)`, `executeQuery(sql)` |
PreparedStatement | 參數化 SQL、防注入、預編譯 | `setString(1, val)`, `executeUpdate()` |
CallableStatement | 呼叫預存程序/函數 | `{call proc(?,?)}`, `registerOutParameter` |
try (Connection conn = DriverManager.getConnection(url, user, pass);
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO COFFEES VALUES (?,?,?,?,?)")) {
pstmt.setString(1, "Colombian");
pstmt.setInt(2, 101);
pstmt.setFloat(3, 7.99f);
pstmt.setInt(4, 0);
pstmt.setInt(5, 0);
pstmt.executeUpdate();
} // 自動關閉 pstmt、conn (逆序)
ClassNotFoundException:驅動 JAR 未在 classpath。SQLException: No suitable driver:URL 格式錯誤或驅動未註冊。Communications link failure:資料庫未啟動、埠號錯誤、防火牆阻擋。掌握 JDBC 基礎,即可進階學習連線池 (HikariCP)、ORM (Hibernate/MyBatis)、事務管理、分散式資料庫存取等企業級主題。