問題虛擬背景:
          A項目組要實現一個基于Sql Server的應用,但工作環境只安裝有MySql(公司對開源比較看好: )),而且客戶有可能會轉移到Oracle數據庫環境。要求應用具有數據庫移植能力和快速更換能力,使應用在工作環境調試成功后能迅速轉移到客戶的Sql Server環境,而且將來可以方便地轉向Oracle。

          Andy提出的可用方案:
          1、使用標準JDBC
          2、使用抽象類定義數據訪問單元
          3、定義具體數據源訪問單元繼承2中接口

          代碼示例:
          定義數據訪問單元抽象類,包含數據訪問邏輯

          public abstract class DataManager
          {
           
          protected static String conString = null;
           
          protected static String urlString = null;
           
          public DataType[ ] getData()
           
          {
             
          //fetch data using standard JDBC with conString and urlString
           }


           
          public void setData(DataType[ ] dataArray)
           
          {
             
          //store data using standard JDBC with conString and urlString
           }

          }

          定義具體數據源訪問單元

          public class HsqlDataManager extends DataManager
          {
           
          static
           
          {
            conString 
          = "org.hsqldb.jdbcDriver";
            urlString 
          = "jdbc:hsqldb:db/YourDatabaseName";
           }

          }


          public class OdbcBlogManager extends AbstractBlogManager
          {
           
          static
           
          {
            conString 
          = "sun.jdbc.odbc.JdbcOdbcDriver";
            urlString 
          = "jdbc:odbc:db/YourDatabaseName";
           }

          }


          在調用數據訪問層時,可以聲明一個DataManager的引用,然后在構造器中實例化為具體子類,如:

          public class Andy
          {
           
          private DataManager dataManager = null;
           
           
          public Andy
           
          {
            dataManager 
          = new HsqlDataManager();
            
          //或者在資源文件里填寫具體子類,然后在這里動態加載并實例化
           }
           

           
          public void doSomething()
           
          {
            dataManager.getData();
            
           }

          }


          以后要遷移到另一個數據庫(有JDBC驅動),只需定義具體子類繼承DataManager(如HsqlDataManager),然后修改資源文件中的DataManager名稱(或者將new的類名改一下),不需要修改代碼。

          這興許可以解釋另一個問題:不贊成使用存儲過程,而應將SQL語句嵌在代碼中(適用于Java;微軟注定.Net不會有平臺移植性,數據庫大都用Sql Server,所以寫存儲過程還是比較好的)。

          (我在我的一個Eclipse RCP項目里使用了這種模式,從Sql server 2000到Hsql,特別方便,看起來感覺也比較好)

          歡迎大家拍轉,^_^



          版權所有 羅明
          posted on 2005-10-06 15:49 羅明 閱讀(1040) 評論(2)  編輯  收藏 所屬分類: JavaProgramTech
          Comments
          • # re: 使應用具有快速更換數據庫能力
            tom
            Posted @ 2005-10-07 08:20
            HIBERNATE  回復  更多評論   
          • # re: 使應用具有快速更換數據庫能力
            Andy luo
            Posted @ 2005-10-07 08:31
            嗯,good  回復  更多評論   
           
          主站蜘蛛池模板: 汨罗市| 阿城市| 安溪县| 文化| 隆林| 江山市| 陇南市| 措勤县| 凌源市| 中山市| 扬州市| 兴宁市| 南溪县| 渭南市| 文安县| 新兴县| 壤塘县| 县级市| 玉屏| 昌江| 屯昌县| 钟祥市| 治县。| 平和县| 榆社县| 额敏县| 沂水县| 温宿县| 星子县| 镇原县| 汉寿县| 南开区| 喜德县| 调兵山市| 苗栗市| 东丰县| 奉节县| 容城县| 蚌埠市| 玉山县| 九龙坡区|