前言
這個小小的數據庫操作封裝框架是參考IBM開發網上的兩篇文章并在其基礎上擴充了一些功能而得到的。所以首先要感謝兩篇文章的作者。
學習JDBC以來一直想實現一個簡單的封裝來方便編程但是由于水平有限一直沒有較好的辦法,看了IBM開發網上的兩篇文章以后感覺作者的設計思想很好一定能擴充成一個實用的JDBC封裝。所以我在文章提供的源碼基礎上加了一些功能這些功能包括支持多種數據類型,處理了空值,利用反射方便的在Row對象和值對象之間進行轉換,還有加了一個我自認為通用的DAO類來方便用戶的操作。
我把源碼提供出來有兩個目的一個是希望能幫助比我還初學的初學者熟悉JDBC,另外就是請各位高手不吝賜教,改進程序中的錯誤假如能將你們的對JDBC的封裝方法提供出來那就更好了(不要說你們只用EJB或者Hibernate,JDO什么的?)。
IBM開發網的那兩篇文章分別是《一個簡單的 JDBC 包裝器》《對一個簡單的 JDBC 包裝器的擴展及應用》,我的郵箱是xsimple2003@yahoo.com.cn有事請與我聯系。
設計思想
把DBMS抽象成類Database,這個類負責治理數據庫連接以及提供表對象。
把數據庫中的一張或多張表抽象成類Table,這個類中提供對表的添加,修改,刪除的JDBC封裝。
將數據庫表中的一條記錄抽象成類Row,這個類用HashMap保存關系數據庫中表格中一行數據的字段名和值并提供一些相關操作。另外這個類還提供了兩個靜態方法用于在Row對象和ValueObject之間進行方便的轉換。
把對個Row的集合抽象成RowSet,這個類中用一個vector把多個Row對象保存起來并提供一些相關操作。
代碼分析
由于已經給出源碼所以我只對代碼中要害的和需要注重的地方加以說明,大家可以執行源碼一邊演示一邊體會。
Database類源碼如下:
package com.gdrj.util.database;
import java.sql.*;
import javax.sql.*;
import com.gdrj.util.servicelocator.*;
public class Database {
/**
* 這個數據庫連接成員只有在與數據庫直接建立連接的情況下是有效的
*/
PRivate Connection conn = null;
/**
* 當這個參數有效時,表明程序是直接與數據庫建立的連接而不是從連接池里取得連接
*/
private String url, user, passWord;
/**
* 當這個參數有效時,表明程序是從連接池里取得連接。
*/
private String datasource;
/**
* 用數據庫地址,用戶名,密碼初始化數據庫對象,這個構造器用于程序是直接
* 與數據庫建立連接的情況。
* @param url
* @param user
* @param password
*/
public Database(String url, String user, String password) {
this.url = url;
this.user = user;
this.password = password;
}
/**
* 用JNDI數據源名初始化數據庫對象,這個構造器用于從連接池取數據庫連接的情況。
* @param datasource
*/
public Database(String datasource) {
this.datasource = datasource;
}
/**
* 得到數據庫連接,對于是否從連接池里取連接做了自動處理即根據用戶調用了哪個構造器
* 來判定是否直接與數據庫建立連接還是從連接池里取連接。
* 對于用戶來說不用考慮程序是從那里取得連接,他只管正確的初始化數據庫對象。
* @return
* @throws SQLException
*/
public Connection getConnection() throws Exception {
if (datasource == null) { //直接與數據庫建立連接
if (conn == null) {
conn = DriverManager.getConnection(url, user, password);
}
}
else { //從應用服務器的連接池里取得連接
新聞熱點
疑難解答