如何正確地應用JDBC API設計實現應用系統持久層中的各個DAO組件

2020-12-13 楊教授工作室

軟體項目實訓及課程設計指導——如何正確地應用JDBC API設計和實現應用系統持久層中的各個DAO組件

1、Java 系統平臺中實現資料庫連接技術相關的API

Java 資料庫連接技術(JDBC,Java DataBase Connectivity)是一種將Java語言與SQL語句相互結合且獨立於特定的物理資料庫系統的應用程式編程接口(API,Application Programming Interface)。

JDBC其實也是一種可用於執行SQL語句的Java API規範,它為物理資料庫系統的應用開發人員、資料庫系統的前臺工具開發人員提供了一種標準的應用程式設計接口,使開發人員可以用純Java語言編寫完整的資料庫應用程式。如下示圖為體現JDBC如何幫助Java程序操作訪問物理資料庫系統中相關數據的工作原理示例圖。

從早期的JDBC1.0到現在的JDBC4.0技術標準,JDBC所提供的各種功能也在不斷地豐富和完善中。在JDBC4.0中新增自動加載JDBC驅動程序類的功能,對資料庫連接管理也有所增強、並支持RowId SQL 類型和完善了SQL異常處理等。

如下示圖說明JDBC不僅為Java應用程式提供操作訪問物理資料庫系統的接口,也為資料庫系統的前臺工具開發人員提供了一種標準的應用程式設計接口,為此MyEclipse開發工具也可以應用JDBC輔助Java開發人員操作訪問物理資料庫系統中的目標數據。

2、了解和熟悉JDBC API中主要的功能類

Java程式設計師可以應用JDBC API實現與目標資料庫的連接,然後再向目標資料庫系統發送SQL語句,最後根據特定的數據訪問操作的要求獲得處理後的結果數據——也就是連接資料庫系統、操作目標數據和獲得最終的操作結果。

而完成這三個階段所涉及的功能,主要是通過對Connection 、Statement、PreparedStatement、CallableStatement和ResultSet等接口的應用編程而實現。

讀者可以查詢JDK API的幫助文檔獲得這些類和接口中的方法定義的細節,下圖所示為JDK API的幫助文檔中有關java.sql包的局部內容的截圖。

3 JDBC中所提供的創建資料庫連接的各種實現方式

(1)利用JDBC-ODBC橋方式連接資料庫

JDBC-ODBC 橋接方式是利用微軟的開放資料庫互連接口(ODBC API)同目標資料庫伺服器通訊連接,客戶端計算機首先應該安裝並配置ODBC Driver和JDBC-ODBC 橋兩種形式的驅動程序。並且還需要在Window作業系統的控制面板中配置出目標資料庫的數據源名稱。下圖所示為對某個資料庫的數據源名進行配置的示圖。

由於ODBC-JDBC橋方式的底層實現不是多線程的,也就是說它不適合在需要並發執行的企業級軟體應用系統的開發中使用;同時它也使得軟體應用系統局限於Windows作業系統平臺中運行,而使得軟體應用系統失除了基於Java平臺所具有的平臺無關性。

(2)利用某個資料庫系統的JDBC 驅動程序直接連接方式

這只需要下載獲得某個資料庫的JDBC 驅動程序JAR包文件,並將該JAR包文件放在項目的classpath路徑中。然後由JDBC 驅動程序JAR包文件中的資料庫連接實現類完成對目標資料庫的連接。下圖所示表示將MySQL的JDBC 驅動程序JAR包文件添加到銀行帳戶管理系統中的WEB-INF/classes目錄中的圖示。

(3)基於DataSource接口實現的資料庫連接池方式

由於JDBC的直接連接方式要求每一次數據訪問請求都必須出現建立資料庫連接和操作完畢後再關閉資料庫連接,而資料庫連接的打開和關閉是一件既消耗資源又費時的工作,如果頻繁發生(這在Web應用系統中比較常見),應用系統的總體性能必然會急劇下降,甚至會導致系統崩潰。

在JDBC2.0版中新增加了javax.sql 程序包,它是對標準的JDBC API的功能擴展,其中提供有DataSource接口,基於DataSource接口可以實現資料庫連接池。如下示圖為JDK API的幫助文檔中有關DataSource接口定義和主要功能說明的局部截圖。

而資料庫連接池技術實現方案是解決這個問題最常用的方法——因為資料庫連接池技術是在伺服器啟動時,預先就建立好指定數量的資料庫連接對象;而對於一個資料庫訪問請求,直接從連接池(也就是內存)中得到一個連接並完成對資料庫中的數據的訪問操作,操作完畢後再將資料庫連接對象重新放回到連接池中(此時並沒有真正地關閉資料庫的物理連接)以便能夠在下次請求時重用。

下圖所示為在銀行帳戶管理系統中應用Apache DBCP組件實現資料庫連接池功能的部分實現代碼的圖示。

4、JDBC編程實現的基本步驟和實現代碼示例

(1)加載連接資料庫的驅動程序(把指定的Java類文件裝載到JVM中)

Class.forName("com.mysql.jdbc.Driver");

(2)創建與數據源(如MySQL資料庫系統)的連接

Connection con=

DriverManager.getConnection("jdbc:mysql://localhost:3306/webbank","root","root");

(3)構建出語句類對象並操作資料庫表中的數據

PreparedStatement pstmt = con.prepareStatement("select count(*) from account");

rs = pstmt.executeQuery();

(4)獲得當前記錄集中的某一條記錄的各個欄位的值

rs.next();

int accountTotalCounter = rs.getInt(1);

(5)關閉查詢語句及資料庫連接對象

try {

con.close();

}

catch(SQLException e){

}

如下示圖所示的程序代碼是將上述五個基本步驟組合在一起後的程序代碼示例。

5、應用JDBC API實現軟體應用系統的持久層時所存在的主要問題

對於一個相對簡單的J2EE應用系統的持久層組件,完全可以直接通過JDBC API編程實現對物理資料庫系統中的資料庫表內數據的訪問和操作——應用JDBC API可以說是訪問物理資料庫系統最原始、最直接的方法。

該方式一方面給軟體應用系統的開發人員提供了比較靈活的編程實現手段,但另一方面也增加了軟體應用系統的開發人員的技術實現的複雜性。

下圖所示為銀行帳戶信息管理系統中的帳戶信息DAO組件中的轉帳方法transferAccount的代碼實現片段圖示。

在基於J2EE系統平臺下的軟體應用系統開發實現中應用JDBC API的主要問題表現在每個數據訪問方法中都需要冗長的錯誤處理代碼來確保ResultSets、Statements以及最重要的Connections等對象在使用後能夠正確地被關閉,同時JDBC API也不提供對異常的層次劃分——各個方法全部都拋出SQLException異常。

而對象/關係的映射(Object/Relation Mapping,簡稱ORM)技術是目前企業級系統開發中持久層比較主流的實現技術,並藉助於各種支持ORM技術的框架進一步簡化對資料庫表中數據的訪問操作組件的編程實現。

相關焦點

  • 如何正確地設計J2EE應用系統持久層中的各個組件結構及組件間關係
    軟體項目實訓及課程設計指導——如何正確地設計J2EE應用系統持久層中的各個組件結構及關係1、了解J2EE應用系統數據持久層中的各個組件類的類型在J2EE系統平臺下的軟體應用系統的數據持久層,一般都包含有如下的各個組件類:實體類、數據訪問對象類(包括接口和對應的實現類
  • 如何正確應用對象/關係映射技術實現應用系統持久層中各個DAO組件
    軟體項目實訓及課程設計指導——如何正確地應用對象/關係映射(O/R Mapping)技術實現應用系統持久層中的各個DAO組件1、了解軟體應用系統持久層實現中的對象/關係映射技術(1)對象/關係映射(O/R Mapping)技術產生的背景
  • 如何合理地設計軟體應用系統中數據訪問服務層內的各個功能程序類
    軟體項目實訓及課程設計指導——如何合理地設計數據訪問服務層中的各個功能程序類作者已經在本系列文章《軟體項目實訓及課程設計指導--如何正確地設計J2EE應用系統持久層中的各個組件結構及關係》中為讀者介紹了為什麼要設計和應用數據訪問服務接口的目的及如何設計該接口以真正達到利用數據訪問服務層組件隔離業務處理邏輯和數據訪問操作邏輯的應用效果
  • 軟體項目實訓及課程設計指導——如何在數據持久層中應用DAO模式
    軟體項目實訓及課程設計指導——如何在J2EE應用系統數據持久層中應用DAO模式1、為什麼要在軟體應用系統中提供數據持久層軟體應用系統中的數據持久層主要為整個軟體應用系統提供數據訪問功能服務,從而可以使軟體應用系統中的業務層組件的設計和開發人員能夠專注於系統業務邏輯的開發
  • 如何應用策略設計模式分離JDBC資料庫連接中的外部環境信息
    軟體項目實訓及課程設計指導——如何應用策略設計模式分離JDBC資料庫連接中的外部環境信息1、什麼是策略(Strategy)設計模式策略設計模式把「算法」(也就是軟體應用系統中的業務規則或者待實現的功能等)和「環境」(封裝軟體應用系統在實際應用時的場景)相互分離
  • 如何正確地創建和銷毀軟體應用系統中JDBC資料庫連接對象實例
    軟體項目實訓及課程設計指導——如何正確地創建和銷毀軟體應用系統中JDBC資料庫連接對象實例1、Java語言中提供有訪問資料庫系統的JDBC編程接口Java 資料庫連接技術(JDBC,Java DataBase Connectivity)其實是將Java語言與標準的
  • 如何優化Web應用數據訪問實現方式以提高軟體應用系統的響應性能
    軟體項目實訓及課程設計指導——如何優化Web應用數據訪問實現方式以提高軟體應用系統的響應性能在軟體應用系統中離不開數據訪問和數據處理兩個方面的功能,而數據處理之前首先要進行數據訪問,也就是只有快速地獲得了數據,才能進行下一步的數據處理。
  • 如何應用觀察者設計模式重構系統中日誌處理功能實現的程序代碼
    軟體項目實訓及課程設計指導——如何應用觀察者設計模式重構系統中的日誌處理功能實現的程序代碼1、GOF設計模式中的觀察者設計模式(1)什麼是觀察者設計模式GOF設計模式中的觀察者設計模式定義了一種解耦「一對多」的依賴關係的編程模式
  • 如何在Web應用系統表示層開發實現中應用Velocity模板技術
    軟體項目實訓及課程設計指導——如何在Web應用系統表示層開發實現中應用Velocity模板技術1、分離Web表示層的數據處理和展現邏輯的常見的應用技術分離Web表示層的數據處理和展現邏輯是目前企業級的Web應用系統開發中表現層組件開發實現中的基本實現目標。
  • 如何保證軟體應用系統架構設計結果的可擴展性和可重用性(上篇)
    (2)合理地對軟體應用系統在縱向方向進行分層隔離設計通過合理地對軟體應用系統在縱向方向進行分層隔離設計——如目前的C/S和B/S等架構模式中的各個分層策略,將允許設計人員將複雜的軟體應用系統中所涉及的各個方面的問題分解成多個不同層次的實現。
  • 軟體項目實訓及課程設計指導——系統概要設計中的組件設計示例
    如幫助文檔的編寫人員)也能夠更好地理解軟體應用系統中的各個功能模塊。——設計出體現軟體應用系統分層中的各個組件,並畫出最終的UML組件圖。而對於一個軟體應用系統來說,在縱向方向從下至上一般可以分為如下不同的組件模塊:1)持久層中的數據連接組件:負責連接軟體應用系統中的資料庫系統;2)持久層中的持久實體組件:這些實體組件負責系統中的各種需要持久化的數據封裝;3)持久層中的數據訪問接口組件
  • 如何應用EhCache緩存框架提高J2EE Web應用系統持久層的響應性能
    軟體項目實訓及課程設計指導——如何應用EhCache緩存框架提高應用系統持久層響應性能1、在Web應用系統中應用持久層相關的緩存框架在Java應用程式開發實現和J2EE Web應用系統的設計和開發實現中,軟體應用系統的設計和開發實現人員可以在系統的表示層和系統的持久層中充分地應用緩存機制和相應實現技術能夠大大地提高
  • 項目實訓及課程設計——如何合理地設計軟體應用系統的Web表示層
    軟體項目實訓及課程設計指導——如何合理地設計軟體應用系統的Web表示層1、用戶界面是軟體應用系統的門面,在設計和開發實現時必須高度重視軟體應用系統表示層內的各個組件是軟體應用系統的前端界面組件,它們直接與應用該軟體應用系統的最終操作者發生各種人機互動行為。
  • 如何應用GOF設計模式中的構建者模式創建複合對象實例
    軟體項目實訓及課程設計指導——如何應用GOF設計模式中的構建者模式創建複合對象實例1、GOF設計模式中的構建者模式構建者設計模式能夠將一個複雜對象(它一般為組合類)的構建過程與它的表示部件相互分離,使得同樣的構建過程可以創建出不同的表示部件——也就是希望所獲得的目標組合對象
  • 如何保證軟體應用系統架構設計結果的可擴展性和可重用性(下篇)
    Java語言中的類定義和包等機制其實就是對面向對象設計技術中的封裝機制的具體支持——隱藏實現細節和保護核心的屬性不被任意地修改,各種J2EE應用框架技術中所提供的各個接口其實也是對該應用框架本身的封裝實現。下圖所示為某個軟體應用系統中的局部類圖的圖示,通過各個功能類實現對每個類所代表的問題的屬性和方法進行封裝。
  • 使用Java API在Jedis中實現DAO設計模式
    在本文中,我們將學習Jedis Java客戶端中的DAO設計模式和實現。DAO模式被實現為客戶端應用程式和資料庫之間的一層。客戶端應用程式不必依賴基礎資料庫交互API(低級)。Redis資料庫中存儲的數據被建模為Domain對象(POJO類),它將僅具有getter和setter方法,客戶端應用程式僅知道域對象和高級API。
  • 軟體項目實訓及課程設計指導——如何實現面向對象的系統架構設計
    下圖所示為體現某個系統的分層架構的UML技術規範的包圖,從該示圖中所展現的UML包圖中可以了解到,該軟體應用系統分別是由表示層、控制層、業務層、數據服務層和持久層等構成的,各個層之間只存在單向依賴關係——從而較好地實現了各個層的封裝和彼此間的隔離。
  • 如何正確地應用Web MVC架構模式分離表示層和模型處理層耦合關係
    軟體項目實訓及課程設計指導——如何正確地應用Web MVC架構模式分離表示層和模型處理層耦合關係 1、MVC體系架構設計模式是用來幫助系統設計人員控制「變化」的一種設計模式 MVC體系架構設計模式是上世紀80年代在Smalltalk
  • 如何應用GOF設計模式中的創建型模式實現鬆耦合地創建對象實例
    軟體項目實訓及課程設計指導——如何應用GOF設計模式中的創建型模式實現鬆耦合地創建對象實例1、GOF設計模式中的工廠模式在GOF設計模式的劃分中,把與實現對象的實例化相關的模式稱之為「創建型模式」——而其中的工廠模式為創建型模式中的一種具體實現形式。
  • 如何在Web應用中實現Velocity 與Struts 框架相互集成的應用實例
    軟體項目實訓及課程設計指導——如何在Web應用系統中實現Velocity 與Struts 框架相互集成的應用實例1、Velocity Tools 子項目及其中的 VelocityStruts 組件(1)Velocity Tools是什麼