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

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

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

          publicabstractclassDataManager
          {
          protectedstaticStringconString=null;
          protectedstaticStringurlString=null;
          publicDataType[]getData()
          {
          //fetchdatausingstandardJDBCwithconStringandurlString
          }


          publicvoidsetData(DataType[]dataArray)
          {
          //storedatausingstandardJDBCwithconStringandurlString
          }

          }

          定義具體數據源訪問單元

          publicclassHsqlDataManagerextendsDataManager
          {
          static
          {
          conString
          ="org.hsqldb.jdbcDriver";
          urlString
          ="jdbc:hsqldb:db/YourDatabaseName";
          }

          }


          publicclassOdbcBlogManagerextendsAbstractBlogManager
          {
          static
          {
          conString
          ="sun.jdbc.odbc.JdbcOdbcDriver";
          urlString
          ="jdbc:odbc:db/YourDatabaseName";
          }

          }


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

          publicclassAndy
          {
          privateDataManagerdataManager=null;

          publicAndy
          {
          dataManager
          =newHsqlDataManager();
          //或者在資源文件里填寫具體子類,然后在這里動態加載并實例化
          }


          publicvoiddoSomething()
          {
          dataManager.getData();

          }

          }


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

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

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

          歡迎大家拍轉,^_^



          版權所有 羅明
          posted on 2005-10-07 00:36 羅明 閱讀(96) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
           
          主站蜘蛛池模板: 吴旗县| 潼南县| 南华县| 南投县| 沅江市| 临西县| 富民县| 吴江市| 新和县| 江阴市| 永城市| 新宾| 新余市| 阿克苏市| 绥化市| 北海市| 黎平县| 井研县| 乐山市| 同德县| 肃北| 石家庄市| 台中县| 乡城县| 南城县| 句容市| 定日县| 兴义市| 长葛市| 土默特左旗| 宁德市| 和硕县| 民权县| 凉山| 乐至县| 叶城县| 嘉荫县| 青川县| 庄河市| 蚌埠市| 江门市|