首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Spring JDBC 框架賦能 Oracle 資料庫訪問:從資源管理到異常處理的全方位簡化

     編輯:Oracle 資料庫基礎

JDBC 痛點與 Spring 解法

  • 資源關閉繁瑣:Connection/Statement/ResultSet 需在 finally 中逐一關閉,代碼冗長易漏。Spring JdbcTemplate 內建資源管理,開發者無感知。
  • SQLException 強制檢查:強迫捕獲/拋出,汙染業務邏輯。Spring 封裝為非檢查的 DataAccessException 體系,可選捕獲。
  • 廠商錯誤碼映射困難:Oracle 錯誤碼豐富但 SQLState 粗糙。Spring 提供 sql-error-codes.xml 將 Oracle 錯誤碼映射至語意化異常(如 BadSqlGrammarException、DataIntegrityViolationException)。

核心代碼對比:傳統 JDBC vs Spring JdbcTemplate

查詢員工獎金

// 傳統 JDBC:~40 行含資源管理與異常處理
// Spring JdbcTemplate:~15 行
List commissions = new ArrayList();
JdbcTemplate jt = new JdbcTemplate(dataSource);
List rows = jt.queryForList("SELECT comm FROM emp");
for (Map row : rows) {
    Number comm = (Number) row.get("COMM");
    commissions.add(comm != null ? new Integer(comm.intValue()) : null);
}

queryForList 回傳 List>,每筆為一行,自動處理 NULL 值(無需 wasNull())。

PreparedStatement 簡化

// 更新薪資等級
String sql = "UPDATE salgrade SET losal=?, hisal=? WHERE grade=?";
jt.update(sql, new Object[]{lowSal, highSal, grade});
// 內部使用 PreparedStatement,自動綁定參數、關閉資源、轉換異常

支援 Oracle 專屬語法與型別

  • ROWID:jt.queryForObject("SELECT rowid FROM emp WHERE empno=?", ROWID.class) 直接取得 oracle.sql.ROWID。
  • SYSdate/DUAL:jt.queryForObject("SELECT sysdate FROM dual", Date.class)。
  • DDL:jt.execute("DROP TABLE t PURGE")。
  • 儲存程序:繼承 StoredProcedure 類,宣告參數順序與型別,execute(Map inParams) 回傳 Map 包含 OUT 參數,自動處理 NULL 輸出(回傳 Java null 而非 0)。
  • Oracle 物件型別:搭配 RowCallbackHandler/PreparedStatementSetter 回調介面,在內部類中處理 java.sql.Struct 或 JPublisher 產生的類,SQLException 由 Spring 統一轉換。

進階優勢

  • 多介面支援:ResultSetExtractor、PreparedStatementCreator、BatchPreparedStatementSetter 等,滿足不同抽象層次需求。
  • Spring 容器整合:DataSource、DAO 透過配置檔注入,解耦業務邏輯。
  • org.springframework.jdbc.object:將 SQL 操作封裝為可重用、線程安全的物件,超越 JdbcTemplate 的更高層抽象。
  • LOB、序列、Native JDBC:OracleLobHandler、OracleSequenceMaxValueIncrementer、NativeJdbcExtractor 等 Oracle 專用工具類。
  • SQLWarning 處理:可選擇轉為異常,適用重度使用 Warning 的資料庫。

總結

Spring JDBC 不強迫全盤採用 Spring 生態,可獨立引入。它以極簡代碼解決 JDBC 核心痛點(資源、異常、廠商錯誤碼),並保留使用 Oracle 專屬特性的彈性。對於不想引入完整 ORM(如 Hibernate/TopLink)但想擺脫 JDBC 樣板代碼的團隊,Spring JDBC 是理想的「輕量級升級」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved