<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

    Andy提出的可用方案:
    1、使用標(biāo)準(zhǔn)JDBC
    2、使用抽象類定義數(shù)據(jù)訪問單元
    3、定義具體數(shù)據(jù)源訪問單元繼承2中接口

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

    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
     }

    }

    定義具體數(shù)據(jù)源訪問單元

    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";
     }

    }


    在調(diào)用數(shù)據(jù)訪問層時(shí),可以聲明一個(gè)DataManager的引用,然后在構(gòu)造器中實(shí)例化為具體子類,如:

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

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

    }


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

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

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

    歡迎大家拍轉(zhuǎn),^_^



    版權(quán)所有 羅明
    posted on 2005-10-06 15:49 羅明 閱讀(1030) 評(píng)論(2)  編輯  收藏 所屬分類: Java 、ProgramTech
    Comments
     
    主站蜘蛛池模板: 亚洲精品成人网站在线播放 | 一二三四在线观看免费高清中文在线观看| 亚洲欧美日韩中文字幕一区二区三区 | 久久久久亚洲AV成人网人人软件| 免费人成视频在线| 99久久99热精品免费观看国产| 国产精品福利片免费看| 粉色视频成年免费人15次| 中文字幕乱码亚洲无线三区| 亚洲Aⅴ无码专区在线观看q| 中文字幕精品无码亚洲字| 国产伦一区二区三区免费| 成人A级毛片免费观看AV网站| 黄网站色在线视频免费观看| 69免费视频大片| 在线成人爽a毛片免费软件| 久久免费观看国产精品88av| fc2免费人成在线视频| 免费国产va在线观看| 久久亚洲精品无码av| 亚洲精品无码专区久久| 国产v亚洲v天堂a无| 亚洲伊人久久大香线蕉| 亚洲国产成人91精品| 亚洲另类视频在线观看| 亚洲字幕在线观看| 亚洲校园春色另类激情| 亚洲天堂2017无码中文| 亚洲成a人片在线看| 97se亚洲国产综合自在线| 亚洲成a人片在线看| 亚洲色大网站WWW永久网站| 精品国产日韩久久亚洲| 日韩国产欧美亚洲v片 | 成人爱做日本视频免费| 国产成人免费全部网站| 亚洲AV无码成H人在线观看| 亚洲精品国产日韩无码AV永久免费网 | 国产AV无码专区亚洲A∨毛片| 亚洲AV无码乱码国产麻豆| 亚洲精品无码久久毛片波多野吉衣|