More  

收藏本站

電腦請使用 Ctrl + D 加入最愛
手機請使用 收藏
關閉

小編的世界 優質文選 資料

如何正確地創建和銷毀軟件應用系統中JDBC數據庫連接對象實例


字體大小:
2020年12月11日 -
:       
 

楊教授工作室

(2)JDBC為基於數據庫系統的各種Java應用提供如下三個方面的功能

1)創建與物理數據庫系統的連接,從而可以操作和訪問目標數據庫系統中的數據;

2)發送標准的SQL語句到指定的關系型數據庫系統中,該SQL語句封裝對目標數據的操作要求;

3)處理數據並查詢處理後的返回結果,該結果以結果集的形式返回給上層的應用,應用系統解析返回的結果集並最終獲得所需要的目標數據。

如下示圖為Oracle公司官方發布的JDBC技術參考文檔中對JDBC的技術特性介紹的部分文字的局部截圖,讀者可以更加權威地了解到JDBC編程接口的主要功能。

3、JDBC數據庫連接Connection對象的主要作用

軟件應用系統的開發人員要想在Java程序中訪問和操作物理數據庫系統中的數據,首先需要創建出 java.sql.Connection數據庫連接對象實例。然後在Connection對象實例的基礎上再構造出相應的語句(如Statement類型或者PreparedStatement類型)類對象實例。

所有的數據庫訪問操作都是在Connection對象實例的基礎上完成的,它代表對數據庫表中數據訪問的一次會話。因此,軟件應用系統的開發人員有必要正確地創建出Connection類的對象實例。

如下示圖為JDK API系統庫的技術參考文檔中對Connection接口的功能介紹文字的局部截圖。

4、JDBC連接數據庫系統的數據源相關的URL字符串規範

(1)標識物理數據庫系統數據源的URL字符串規範

標識物理數據庫系統數據源的URL字符串的格式如下所示: jdbc:<subprotocal>:

其中的“jdbc”主要指出要使用JDBC編程接口,而“subprotocal”主要是定義驅動程序類型,“database locator”則是提供網絡數據庫的位置和端口號(包括主機名、端口和數據庫系統名等)。示例如下:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs

(2)JDBC URL 字符串規範提供了一種標識物理數據庫系統的標准

應用JDBC URL 字符串規範,可以使得相應的物理數據庫系統的Java JDBC的驅動程序能識別出所要連接的目標物理數據庫系統的類型、網絡位置以及數據庫名稱等信息,從而實現與目標數據庫系統建立連接。

但由於JDBC編程接口只對JDBC URL字符串提出了“形式”方面的規範要求,並沒有給出具體和統一的URL字符串模板。因此,在Java應用系統程序中連接不同的數據庫系統或者同一種數據庫系統的不同版本、不同的連接方式等,所對應的JDBC URL字符串可能都存在差別。

因此,讀者在數據庫系統應用相關的開發中容易給出錯誤的JDBC URL字符串,導致無法正確地連接到目標數據庫系統。因為JDBC的Java驅動程序的編程實現人員將決定采用什麼內容的JDBC URL來標識所開發的特定驅動程序;不同廠商的物理數據庫系統,在Java應用中的主要差別在於JDBC的驅動程序類型及標識物理數據庫系統的JDBC URL字符串。

1)連接Oracle數據庫系統時的JDBC URL字符串為:jdbc:oracle:thin:@10.172.0.107:1521:DBName;

2)連接MS SQLServer數據庫系統時,數據庫在IP地址為10.172.0.105的遠程主機時的JDBC URL字符串為:jdbc:microsoft:sqlserver://10.172.0.105:1433;DatabaseName=pubs;如果MS SQLServer數據庫系統在本機中,則其中的IP地址10.172.0.105改變為127.0.0.1:1本機IP地址。

3)連接MySQL數據庫系統時的JDBC URL字符串為:jdbc:mysql://localhost:3306/webbank,其中的“localhost”代表物理數據庫系統就在本機中,如果物理數據庫系統位於遠程主機中,則需要將其中的“localhost”改變為遠程主機的IP地址。

5、正確地構造本數據庫連接的JDBC數據源URL地址

根據上面對JDBC URL字符串的介紹,讀者可以了解到JDBC數據源URL地址提供了一種標識目標數據庫文件的方法,可以使相應的JDBC驅動程序能識別出該數據庫系統並與之建立對應的連接。

當然,JDBC的Java驅動程序的開發實現人員將決定用什麼內容或者特定標識字符所構成的JDBC數據源URL地址來標識特定的數據庫系統;不同廠商的物理數據庫系統在Java應用中的主要差別在於JDBC的驅動程序類名稱及JDBC數據源URL地址的格式。

軟件應用系統的開發人員應該首先了解所要連接的數據庫類型和所要采用的JDBC的驅動程序類型,然後再根據該JDBC的驅動程序類型構造出對應的JDBC數據源URL地址字符串,一般在JDBC的驅動程序提供者所提供的幫助文檔中有詳細的文檔說明。

6、獲得某個數據庫系統的JDBC驅動程序類的類名稱字符串

同一種物理數據庫系統可能會存在多種不同形式的JDBC驅動程序類,因為這些JDBC驅動程序類可能是由不同的廠商或者開源機構或者人員所提供。因此,軟件應用系統的開發人員在構造數據庫連接Connection對象實例之前還必須正確地了解所應用的JDBC驅動程序類的類名稱字符串。

(1)連接Oracle數據庫時的JDBC驅動程序類的類名稱字符串為:oracle.jdbc.driver.OracleDriver;

(2)連接MS SQLServer數據庫時的JDBC驅動程序類的類名稱字符串為:com.microsoft.jdbc.sqlserver.SQLServerDriver;

(3)連接MySQL數據庫時的JDBC驅動程序類的類名稱字符串為:com.mysql.jdbc.Driver。

7、如何正確地創建出數據庫連接Connection類型的對象實例

在構造數據庫連接Connection對象實例之前,首先要利用Class類中的static形式的forName靜態方法加載JDBC驅動程序類,然後再利用DriverManager接口中所提供的getConnection方法獲得指定的Connection對象實例。

如下為正確地創建出數據庫連接Connection對象實例的程序代碼片段示例:

try {

Class.forName(“JDBC驅動程序類名稱”);

}

catch (java.lang.ClassNotFoundException e){

}

try {

oneConnectionObject= DriverManager.getConnection(“JDBC數據源URL地址”);

}

catch (java.sql.SQLException e){

}

catch (NullPointerException e){

}

8、分離創建數據庫連接對象中所需要的各種連接信息

由於在構造數據庫連接Connection對象實例時,一般需要提供JDBC數據源URL地址、JDBC驅動程序類名稱以及在數據庫系統中所建立的賬戶和密碼(該賬戶有訪問數據庫系統的權限)等方面的信息。

而這些信息是有可能經常發生變化的(比如訪問數據庫系統的賬戶所對應的密碼),如果直接將這些信息寫在程序代碼中將導致程序代碼缺乏靈活性——當數據庫連接有關的信息發生變化時,則需要改動創建數據庫連接Connection對象實例的有關程序代碼,導致程序代碼缺少靈活性。

如下示圖中的程序代碼示例是不良好的JDBC數據庫應用的程序代碼,因為將物理數據庫系統的類型、網絡位置、數據庫名稱、連接賬戶和密碼等信息都直接硬編碼的方式寫入到程序代碼中。

為了能夠提高程序代碼的靈活性,應該要分離創建數據庫連接對象中所需要的各種連接信息,並將這些連接信息保存到一個外部配置文件中——比如,可以采用Java屬性配置文件(*.properties)或者XML格式的配置文件(*.xml),讀者可以參見如下示圖中的Java屬性配置文件的配置示例。

在示例項目銀行賬戶信息管理系統中是利用XML格式的系統配置文件classNameConfig.xml存放創建數據庫連接Connection對象實例中所需要的各種連接信息,如下代碼示例為XML配置文件classNameConfig.xml中的部分代碼示例。

<?xml version="1.0" encoding="UTF-8"?>

<classNames>

<className>

<classNameID>JDBC_DBDriver_ClassName</classNameID>

<classNamePath>com.mysql.jdbc.Driver</classNamePath>

</className>

<className>

<classNameID>JDBC_DSN_URL</classNameID>

<classNamePath>jdbc:mysql://localhost:3306/webbank</classNamePath>

</className>

<className>

<classNameID>JDBC_dbUserName</classNameID>

<classNamePath>root</classNamePath>

</className>

<className>

<classNameID>JDBC_dbUserPassWord</classNameID>

<classNamePath>root</classNamePath>

</className>

</classNames>

然後在程序中應用XML解析技術動態獲得保存在XML配置文件中的數據庫連接信息,最後將這些連接信息傳遞給DriverManager.getConnection()方法,請見下圖所示的程序代碼片段截圖。

9、如何正確地關閉數據庫連接Connection對象實例

當在程序代碼中構造出數據庫連接Connection的對象實例後,Java虛擬機JVM系統同樣也需要為它分配有關的各種系統資源。因此,當不再需要該數據庫連接Connection的對象實例後,也應該要及時地關閉Connection的對象實例以釋放它所占用的系統資源。

下面為關閉數據庫連接Connection對象實例的代碼片段示例,並且要將這些代碼放在finally 關鍵字所標識的語句塊中:

finally{

try{

/** oneConnectionObject代表Connection接口的對象實例 */

oneConnectionObject.close();

oneConnectionObject = null;

}

catch (SQLException e){

}

}

如何正確地創建和銷毀軟件應用系統中網絡通訊中的Socket對象實例

在程序中如何正確地創建和銷毀軟件應用系統中文件IO流對象實例

課程設計指導——如何應用Java反射技術靈活地創建程序類對象實例

如何應用GOF設計模式中的構建者模式創建複合對象實例

如何應用GOF設計模式中的創建型模式實現松耦合地創建對象實例