問題虛擬背景:
          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 羅明 閱讀(1034) 評論(2)  編輯  收藏 所屬分類: JavaProgramTech
          Comments
          • # re: 使應用具有快速更換數據庫能力
            tom
            Posted @ 2005-10-07 08:20
            HIBERNATE  回復  更多評論   
          • # re: 使應用具有快速更換數據庫能力
            Andy luo
            Posted @ 2005-10-07 08:31
            嗯,good  回復  更多評論   
           
          主站蜘蛛池模板: 卢龙县| 大兴区| 黄浦区| 平南县| 澎湖县| 原阳县| 兴和县| 葫芦岛市| 靖安县| 绥芬河市| 太湖县| 香港 | 资溪县| 岳阳市| 安远县| 博客| 曲阜市| 科技| 乡宁县| 青浦区| 周口市| 巴东县| 自治县| 江安县| 道孚县| 全州县| 肥城市| 长岭县| 南城县| 安徽省| 丰镇市| 本溪| 沾益县| 福建省| 咸阳市| 株洲市| 龙岩市| 呈贡县| 依安县| 连州市| 大连市|