數據庫設計基石:范式理論
- 1NF: 每列不可再分,無重複組。
- 2NF: 滿足 1NF,非主鍵列完全依賴主鍵(無部分依賴)。
- 3NF: 滿足 2NF,非主鍵列互不依賴(無傳遞依賴)。主流關係型資料庫均遵循 3NF 設計。
SQL 與跨表查詢
使用 JOIN 關聯多表,如員工表與薪資範圍表通過 SalaryKey 連接,生成動態視圖。SQL-92 為基準標準,各廠商實現方言略有差異。
JDBC 架構與驅動類型
| 類型 | 名稱 | 特點 | 適用場景 |
| Type 1 | JDBC-ODBC Bridge | 依賴客戶端 ODBC 驅動,Windows 專用,臨時方案 | 桌面小型應用 |
| Type 2 | Native-API Driver | 調用本地數據庫客戶端庫,需客戶端安裝 | 內網 C/S 架構 |
| Type 3 | Network-Protocol Driver | 純 Java,中間件服務器轉發,支持連接池/負載均衡 | 互聯網/Applet |
| Type 4 | Thin Driver | 純 Java 直連數據庫協議,無中間層,性能最佳 | 企業級標準選擇 |
核心 API 快速上手
// 1. 加載驅動
Class.forName("com.mysql.jdbc.Driver");
// 2. 建立連接
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/demo", "user", "pwd");
// 3. 創建 Statement / PreparedStatement
PreparedStatement ps = conn.prepareStatement("SELECT * FROM users WHERE id=?");
ps.setInt(1, 100);
// 4. 執行查詢/更新
ResultSet rs = ps.executeQuery();
while (rs.next()) {
System.out.println(rs.getString("name"));
}
// 5. 關閉資源(finally 或 try-with-resources)
rs.close(); ps.close(); conn.close();
主流數據庫連接參數速查
- MySQL:
jdbc:mysql://host:3306/db,驅動 com.mysql.jdbc.Driver
- PostgreSQL:
jdbc:postgresql://host/db,驅動 org.postgresql.Driver
- Oracle:
jdbc:oracle:thin:@host:1521:SID,驅動 oracle.jdbc.driver.OracleDriver
- SQL Server (jTDS):
jdbc:jtds:sqlserver://host:1433/db,驅動 net.sourceforge.jtds.jdbc.Driver
- SQL Server (Microsoft):
jdbc:microsoft:sqlserver://host:1433;databaseName=db
- DB2:
jdbc:db2://host:6789/db,驅動 com.ibm.db2.jcc.DB2Driver
- ODBC 通用:
jdbc:odbc:DSN名,驅動 sun.jdbc.odbc.JdbcOdbcDriver
進階特性
- 連接池: WebLogic/DBCP/HikariCP 預創建連接,劇烈降低獲取開銷,配置初始/最大/增量容量、驗證查詢、縮容策略。
- 事務控制:
conn.setAutoCommit(false) 手動提交/回滾,配合保存點實現嵌套事務。
- 存儲過程調用:
CallableStatement 支持 IN/OUT/INOUT 參數與返回值,語法 {call proc(?,?)} / {?=call func(?,?)}。
- 元數據:
DatabaseMetaData 獲取表/列/索引/權限信息,ResultSetMetaData 動態解析結果集結構。
兩層 vs 三層架構
- 兩層:客戶端直連數據庫(Applet/桌面),邏輯與數據耦合。
- 三層:客戶端 → 應用服務器(EJB/Spring Service) → 數據庫,業務邏輯集中、安全可控、易擴展。
- 上一篇文章: Spring 事務管理深度解析(四)
- 下一篇文章: Java Servlet 生命週期與線程安全實戰
Copyright ©
程式碼之家 All Rights Reserved