第五章 系統實作與驗證
5.3 個案分析
5.3.7 比較資料庫連接方式
透過本架構提出的資料庫存取物件,可以以物件化的介面存取關聯式資料 庫,這樣做的好處是可以減少結構化查詢語句這類非物件導向式設計的語法,在 Java 程式碼中出現,圖 5.8 是利用 JDBC 的方式去連接資料庫之程式碼。
Order
Database
Product Sales
Customer
Sales ClassProxy
Customer ClassProxy
Order ClassProxy
Product ClassProxy
JDBC
圖 5.8 使用 JDBC 連接資料庫之 Sales 程式碼(部分)
使用 JDBC 的方式連接關聯式資料庫會使得整個程式碼看起來相當的紛亂,
許多非物件化的語句參雜其中,增加維護上的困難。圖 5.9 上半部份是利用 JDBC 的方式存取關聯式資料庫之示意圖。
import java.sql.*;
public class Sales extends Employee{
private Order[] Order=null;
private String CommissionRatio=null;
public Sales() { }
public void addSales(){
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
} catch (Exception exp) {
System.out.println("MySQL Driver 載入失敗!!\t"+exp);
} try {
Connection conn =
DriverManager.getConnection("jdbc:mysql://path/DataBase?user=username&pass word=password");
Statement stmt = null;
try {
stmt = conn.createStatement();
stmt.executeUpdate("insert into sales(field) values(values)");
}finally {
if (stmt != null) { try {
stmt.close();
} catch (SQLException sqlEx) { stmt = null;
} } }
} catch (SQLException ex) {
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
} }
圖 5.9 使用 JDBC 與資料庫存取物件使用示意圖
圖 5.9 下半部份為使用 ClassProxy 存取關聯式資料庫示意圖,與 JDBC 的方 法比較,不難發現透過資料庫存取物件的方法進行資料庫的存取在程式碼的長度 與可讀性上都大大的提升,程式設計人員不需要知道如何去進行資料庫的存取,
或是分心在注意哪一個屬性對應哪一個資料表的某個欄位,這些工作都交給本論 文所提出之資料庫存取物件來進行。
使用資料庫存取物件則使用本系統中提供的 ClassProxy 方法進行資料庫的存 取,相關 ClassProxy 提供之方法請參照表 4.8。圖 5.10 是利用本論文提出之資料 庫存取物件的方式連接關聯式資料庫之程式碼。
圖 5.10 使用物件存取介面存取資料庫 Sales Java code
Object methods
JDBC
Database Sales
Class Proxy Sales Java
code SQL statements
JDBC
Database
public class Sales extends Employee{
private Order Order=null;
private String CommissionRatio=null;
private static ClassProxy ClassProxy=null;
public Sales() { if (ClassProxy==null)
ClassProxy=new ClassProxy("Sales");
}
public void addSales(){
this.name=name;
this.CommissionRation=CommissionRation;
this.ClassProxy.updateObject();
}
public void computeSalary(){
}
表 5.6 為程式設計人員所需撰寫之程式碼行數比較,使用 JDBC 進行資料庫存 取時,雖然在執行結構化語句上只有一行負責進行資料的存取,但是為了能夠讓 資料庫可以正常連結,則需要許多的程式碼去控制與處理相關的訊息,造成程式 碼在閱讀上的困難。透過資料庫存取物件的方法,可以將這個部份包裝成物件的 方法,來讓程式設計人員使用,如此可以大量的減少程式碼行數,也提升了程式 的可閱讀性。由於連接資料庫方法還是使用 JDBC 的方式進行資料庫的連接,因 此在實際上執行之程式碼行數會比 JDBC 方式還要多一些,但是都在可以接受的 範圍之內。
表 5.6 使用 JDBC 與資料庫存取物件程式碼行數比較
使用 JDBC 方法 使用資料庫存取物件方法 程式撰寫行數 實際執行行數 程式撰寫行數 實際執行行數
新增資料 8 8 1 9
修改資料 8 8 1 9
刪除資料 8 8 1 9
查詢 9 9 2 11
圖 5.11 表示在使用同一個資料庫連接時,同時執行多個 SQL 語句所需執行之 程式碼行數比較。由圖中可以發現,在同一個資料庫連接中執行較多的 SQL 語句,
JDBC 的方法在效率上優於本架構所提的方法,但是在目前的應用系統當中,單一 次資料庫連接處理大量的 SQL 語句是相當少見,大部分企業應用系統不會在單次 資料庫連接中處理超過五次的 SQL 語句,因此本架構之效能在能接受的範圍內。
透過本架構的資料庫存取物件,讓程式設計人員可以撰寫更少的程式碼,並且讓 程式的可讀性也隨之提升。
0 20 40 60 80 100
0 1 2 3 4 5 6 7 8 9 10 11
SQL語句數 程
式 碼 行 數
JDBC程式撰寫行數 資料庫存取物件執行
程式人員所需撰寫行數
圖 5.11 複合式結構化語句更新之程式碼行數比較
本章透過這些簡單的測試,證明本研究所提出來的架構是可行的,並可以透 過本論文所提出之架構,讓程式設計人員可以更簡單的去進行資料庫的存取,並 且提升程式的可讀性降低維護的成本。同時透過本論文所提出之架構自動化的產 生相關的資訊,加速系統開發的時程。
第六章 結論與未來展望
前端由物件導向方式進行開發,而後端使用關聯式資料庫的狀態進行系統開 發的情境在企業中相當的常見。本研究透過提出一個自動化的產生資料庫表格與 建立物件化的存取資料庫介面,讓系統開發的時程得以縮短,也讓設計出來之資 料庫表格有一定的規則可以遵循。其實在未來還有許多可以更進一步的實作及研 究可以進行,本章節提出本論文的結論與可供繼續研究的方向。