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

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

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

    隨筆-71  評論-4  文章-0  trackbacks-0
      一、設計模式簡介 
       在開發J2EE應用程序時,通常是要找出應用程序中涉及到的各種信息,比如一個公司的產品目錄,或一個網站的用戶信息,我們會將這些信息放在數據庫里。 

       在通常的設計中,我們要分析這些數據的屬性和關系,然后進行數據庫的邏輯設計,把各種信息用不同的表來存儲。比如,要開發一個圖書信息查詢系統。可以創建下面兩個表來分別表示書和出版社。 

       table Book (ID, Name, ISBN, Author, PublisherID, Price, Volume) 

       table Publisher (ID, Name, Telephone, Address, Postcode) 

       表Book包含了ID,書名,書號,作者,出版社ID,價格,頁數。表Publisher包含ID,社名,電話,地址,郵編。這兩個表通過出版社ID相關。 

       下面我們來介紹一種數據庫相關類的設計的模式。 

       數據庫相關類可以分成實體類(Entity Class)和會話類(Session Class)。 

       實體類對應于一個表的記錄的封裝,也就是該類的一個實例對應于表中的一個記錄。而且,該類中的屬性和記錄中的字段是一一對應的。 

       會話類對應于對一個表中的所有記錄的操作。比如增加一條記錄,刪除一條記錄,查找記錄和更新一條記錄。 

       通過使用這種設計模式,使程序更加模塊化,便于開發和維護。當然,也可以使用其他設計模式。 

    二、程序實現 
       在具體實現上面的這種模式時,往往根據具體的應用程序來選用不同的技術來實現。看到上面的描述模式后,我們很容易就發現,可以用EJB來實現(EJB分兩種,實體EJB和會話EJB)。 

       我們知道,EJB提出來的目的是用于提供一種分布式組件系統的開發。如果我們的應用程序是一個分布式的應用系統,那么毫無疑問,使用EJB來實現能大大減輕編程的工作量。同時,通過使用EJB容器的一些高級特性,可以使應用程序更加可靠,擴展性也大大加強。這樣一來,開發人員就不必關心一些底層技術,比如事務處理,安全等各個方面,而是把重點放在怎樣實現業務邏輯上。但是我們應該注意,如果開發的應用不是分布式的情況下,那么采用EJB有可能大大降低系統的性能。因為,EJB調用的開銷很大。 

       本文將探討在不利用EJB技術的情況下如何來實現上面介紹的這個模式。 

       下面以開發圖書信息查詢系統為例。 

       1.實體類 

       如前面講到的,實體類的每個實例與表中一個記錄對應。這樣,實體類的屬性應該和表的每個字段一一對應。必須注意的是,實體類的實例是每個記錄在內存中的對應,因此,在程序中對實例的操作并不馬上反應到數據庫的記錄中。 

       在該類中,只是對數據的包裝,因此,該類僅需要一些基本的方法,即setXX()和getXX()方法。 

       下面是一個實體類,是對Book表的封裝。 
       class Book{ 

        protected int  ID; 

        protected String Name; 

        protected String ISBN; 

        protected String Author; 

        protected int  PublisherID; 

        protected double Price; 

        protected int  Volume; 

        public void setID(int iID); 

        public int  getID(); 

        public void setName(String sName); 

        public String getName(); 

        public void setISBN(String sISBN); 

        public String getISBN(); 

        public void setAuthor(String sAuthor); 

        public String getAuthor(); 

        public void setPublisherID(int iID); 

        public int  getPublisherID(); 

        public void setPrice(double dPrice); 

        public double getPrice(); 

        public void setVolume(int iVolume); 

        public int  getVolume(); 

        public Book(int iID, String sName, String sISBN, int iPublisherID, double dPrice, int iVolume); 

       }; 

       同樣地可以對表Publisher進行封裝。 

       2.會話類 

       會話類主要是對一個表進行處理。這些操作可以是在表中創建一條記錄,刪除一條記錄,更新一條記錄和查找一條記錄。這些操作的結果是將表中的記錄和內存中的實體類的實例對應起來,或將實例與表中的記錄對應起來。 

       我們可以看一下對Book表的封裝。 

       class BookTable{ 

        void Add(Book book); 

        void Delete(Book book); 

        void Update(Book book); 

        Collection findbyID(int iID); 

        Collection findbyXXXX(XX,XX); 

        Collection findbyPulisherName(String sPublisherName); 

       }; 

       上面的類的申明中,Add()用于將內存中的一個Book實例映射到數據庫中。Delete()用于刪除數據庫中的某一個記錄。Update()用于更新表中的一個記錄。而findbyXXXX()則對應于SELECT語句。 

       對于涉及到多個表操作時,可以有兩種方式。一種是象BookTable一樣,專門封裝一個類。另一個方法是,直接在BoolTable中寫一個findbyPublisherName()。這個方法設計成返回一個Book的集合。 

       上面只是簡單的介紹了怎樣實現實體類和會話類。在具體的應用中,還要考慮到數據庫操作的一致性。下面就介紹一下事務處理的相關內容。 

    三、事務處理 
       為了確保對數據操作的完整和一致,在程序設計時要充分考慮到事務處理方面的問題。 

       1.JDBC中怎樣將多個SQL語句組合成一個事務。 

       在JDBC中,打開一個連接對象Connection時,缺省是auto-commit模式,每個SQL語句都被當作一個事務,即每次執行一個語句,都會自動的得到事務確認。為了能將多個SQL語句組合成一個事務,要將auto-commit模式屏蔽掉。 

       在auto-commit模式屏蔽掉之后,如果不調用commit()方法,SQL語句不會得到事務確認。在最近一次commit()方法調用之后的所有SQL會在方法commit()調用時得到確認。 

       下面的代碼是一個示范: 

       con.setAutoCommit(false); 

       PreparedStatement updateSales=con.prepareStatement("UPDATE COFFES SET SALES=? WHERE COF_NAME LIKE ?"); 

       updateSales.setInt(1,50); 

       updateSales.setString(2,"Colombian"); 

       updateSales.executeUpdate(); 

       PreparedStatement updateTotal=con.prepareStatement("UPDATE COFFEES SET TOTAL =TOTAL+ ? WHERE COD_NAME LIKE ?"); 

       updateTotal.setInt(1,50); 

       updateTotal.setString(2,"Colombian"); 

       updateTotal.executeUpdate(); 

       con.commit(0; 

       con.setAutoCommit(true); 

       2.J2EE中分布式事務處理 

       在J2EE中,程序里可以使用JTA來調用底層的JTS(JAVA Transaction Service 提供者服務)來處理分布式的事務處理。另外,如果使用EJB,可以通過在描述文件中指定transaction的屬性來實現。 

       有關分布式事務處理的具體內容,請參見J2EE規范。 
    posted on 2006-01-12 12:38 zjw_albert 閱讀(113) 評論(0)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲国产精品成人精品小说| 国产A在亚洲线播放| 亚洲精品乱码久久久久久蜜桃图片| 91精品国产免费| 亚洲AV色香蕉一区二区| 未满十八18禁止免费无码网站| 亚洲国产精品特色大片观看完整版| 免费观看久久精彩视频| 亚洲国产精品VA在线看黑人 | 亚洲AV无码成人精品区天堂| 好吊色永久免费视频大全| 国产亚洲色视频在线| 国产午夜不卡AV免费| 内射干少妇亚洲69XXX| 日韩亚洲国产综合久久久| 曰批免费视频播放免费| 国产精品亚洲高清一区二区| 免费h视频在线观看| 亚洲成人一级电影| 成人免费看吃奶视频网站| 黄人成a动漫片免费网站| 中文字幕人成人乱码亚洲电影| 97人妻精品全国免费视频| 亚洲男人电影天堂| 日本无卡码免费一区二区三区| 免费国产黄网站在线看| 亚洲午夜视频在线观看| 成人影片麻豆国产影片免费观看| 美女被免费视频网站| 亚洲av无码精品网站| 性做久久久久久久免费看| 杨幂最新免费特级毛片| 五月天网站亚洲小说| 日韩中文无码有码免费视频| 99精品免费视品| 亚洲成A人片在线播放器| 亚洲熟妇中文字幕五十中出| 182tv免费视视频线路一二三| 亚洲精品蜜夜内射| 亚洲欧洲日产国码久在线观看| 午夜免费福利在线|