亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

J2EE 應用程序中的數據管理和數據持久性

2019-11-18 12:29:01
字體:
來源:轉載
供稿:網友

  本文分析了在 java 平臺上可用的兩個數據治理策略:Java 對象序列化和 Java 數據庫連接(JDBC)。盡管本質上這兩種數據治理策略并不存在孰優孰劣的問題,但在治理企業信息系統時,JDBC 輕而易舉地得以勝出。在本文中,Java 開發人員 G.V.B. Subrahmanyam 和 Shankar Itchapurapu 對序列化和 JDBC都進行了介紹,并通過討論和實例來向您展示了 JDBC 是您的最佳選擇的原因。
  
  當您正在建立企業信息系統時,需要確保以某種有效的方式存儲、檢索和顯示企業數據。對于所有業務而言,數據都是獨一無二的最大資產。所有軟件系統都涉及數據,因此,數據的重要性是無論如何強調都不過分的。
  
  應用程序的數據治理功能包括四個基本操作,通常也需要對企業數據執行這四個操作,它們是:建立、檢索、更新 和 刪除(即 CRUD)。治理在企業系統的數據涉及在很長一段時間范圍之內,始終如一地、成功地執行 CRUD 操作,而不必頻繁地更改實際執行這些操作的代碼。換句話說,治理數據意味著開發穩健的、可擴展和可維護的軟件系統,以確保成功地進行 CRUD 操作,在軟件的生命期中能夠以一致的方式執行操作。
  
  本文討論了 J2EE 中的兩種可用數據治理策略:Java 對象序列化和 Java 數據庫連接(JDBC)。我們將查看這兩種方法的優缺點。這兩種數據治理策略實質上不存在孰優孰劣。在特定實現中,策略的可用性取決于項目的范圍(出現在系統環境中的活動的活動范圍),系統的上下文(驅動系統/子系統運行時的值的集合),以及其他的外部因素。然而,Java 序列化并不適合于企業系統,其數據需要用一種定義良好的結構(如RDBMS)來組織。我們首先將快速瀏覽 Java 對象序列化,然后查看 JDBC 更重要的一些方面,從而了解后者是如何實現前者所缺乏的一些要害特性的。
  
  本文并不打算對 Java 對象序列化或者 JDBC 進行全面介紹。有關這兩項技術的更多信息,請回顧參考資料小節。
  
  Java 對象序列化
  對象序列化是最簡單的 Java 持久性策略。對象序列化是一個將對象圖平面化為一個字節的線性序列的過程。對象圖是作為對象繼續、關聯和聚合的結果而實現的一些關系式。對象的非暫態實例屬性以字節的形式被寫入到持久存儲中。實例屬性的值就是執行時間序列化時內存中的值。假如一個 Java 對象是可序列化的,那么它至少必須實現 java.io.Serializable 接口,該接口具有如下所示的結構:
  
  package java.io;
  public interface Serializable
  {}
  
  您可以看到,java.io.Serializable 接口并沒有聲明任何方法。它是一個記號或者標記接口。它告訴 Java 運行時環境,該實現類是可序列化的。列表 1 顯示實現該接口的一個示例類。
  
  列表 1. MySerializableObject.java
  
  import java.io.Serializable;
  
  public class MySerializableObject extends MySuperClass implements Serializable
  {
   PRivate String property1 = null;
  private String property2 = null;
  
  public String getProperty1()
  {
   return property1;
  }
  
  public void setProperty1(String val)
  {
   property1 = val;
  }
  public String getProperty2()
  {
   return property2;
  }
  
  public void setProperty2(String val)
  {
   property2 = val;
  }
   private void writeObject(ObjectOutputStream out)
   throws IOException
   {
    out.writeObject (getProperty1 ());
   out.writeObject (getProperty2 ());
   }
  
   private void readObject (ObjectInputStream in)
   throws IOException, ClassNotFoundException
   {
    setProperty1 ((String) in.readObject ());
    setProperty2 ((String) in.readObject ());
   }
  }
  
  無需自己實現 writeObject(...) 和 readObject(...) 方法來執行序列化;Java 運行時環境具有使這些方法可用的默認實現。然而,您可以重寫這些方法,提供如何存儲對象狀態的您自己的實現。
  
  關于序列化,您需要記住一些要點。首先,在序列化期間,整個對象圖(即,所有父類和被引用類)都將被序列化。其次, Serializable 類的所有實例變量自身都應該是可序列化的,除非已經非凡聲明它們為暫態,或者已經重寫 writeObject(...) 和 readObject(...) 來只序列化那些可序列化的實例變量。假如違反了后一規則,在運行時將出現一個異常。
  
  每個后續 J2SE 版本都對對象序列化系統進行少量的增加。J2SE 1.4 也相應地向 ObjectOutputStream and ObjectInputStream 增加 writeUnshared() and readUnshared()方法。通常,一個序列化的流只包含任何給定對象的一個序列化實例,并且共享對該對象引用的其他對象可以對它進行后向引用。通常期望序列化一個對象獨立于其他對象可能維護的任何引用。非共享的讀寫方法答應對象作為新的、獨一無二的對象被序列化,從而獲得一個類似于對象克隆但開銷更少的效果。
  
  Java 對象序列化存在的問題
  序列化涉及到將對象圖從內存具體化到持久存儲(例如硬盤)中。這涉及到大量 I/O 開銷。通常,對應用程序而言,序列化并不是最佳選擇:
  
  治理幾十萬兆字節的存儲數據
  頻繁地更新可序列化對象
  對存儲企業數據而言,序列化是一個錯誤選擇,因為:
  
  序列化的字節流只對 Java 語言是可讀的。這是一個重大缺陷,因為企業系統通常是異構的,許多應用程序要與其他應用程序共同處理相同的數據。
  
  對象檢索涉及大量的 I/O 開銷。
  
  沒有一個用來從序列化對象圖中檢索獲取數據的查詢語言。
  
  序列化沒有內置的安全機制。
  
  序列化本身并不提供任何事務控制機制,因此不能在那些需要并發訪問從而不使用輔助 API 的應用程序中使用它。
  Java 數據庫連接(JDBC)
  Java 數據庫連接(JDBC)是一個標準的 API,它使用 Java 編程語言與數據庫進行交互。諸如 JDBC 的調用級接口是編程接口,它們答應從外部訪問 SQL 命令來處理和更新數據庫中的數據。通過提供與數據庫連接的庫例程,它們答應將 SQL 調用集成到通用的編程環境中。非凡是,JDBC 有一個使接口變得極其簡單和直觀的例程的豐富收集。
  
  在下面幾個小節中,我們將查看通過 JDBC 與數據庫連接所涉及的一些步驟。我們將非凡關注與 Java 對象序列化相比,JDBC 是如何成為一個企業數據治理策略的。
  
  建立一個數據庫連接
  在利用 JDBC 做任何其他事情之前,需要從驅動程序供給商那里獲取數據庫驅動程序,并且將該庫添加到類路徑中。一旦完這項工作,就可以在 Java 程序中使用類似于下面所示的代碼來實現實際的連接。
  
  Class.forName(<your driver class Name>);
  Java.sql.Connection conn = DriverManager.getConnection(<connection URL>);
  
  Java 對象序列化并不需要這個該步驟,因為使用序列化來執行持久性操作并不需要 DBMS。 序列化是一個基于文件的機制;因此,在序列化一個對象之前,需要在目標文件系統中打開一個 I/O 流。
  
  創建 JDBC Statement 和 PreparedStatement
  可以用 JDBC Statement 對象將 SQL 語句發送到數據庫治理系統(DBMS),并且不應該將該對象與 SQL 語句混淆。 JDBC Statement 對象是與打開連接有關聯,而不是與任何單獨的 SQL 語句有關聯??梢詫?JDBC Statement 對象看作是位于連接上的一個通道,將一個或多個(您請求執行的)SQL 語句傳送給 DBMS。
  
  為了創建 Statement 對象,您需要一個活動的連接。通過使用我們前面所創建的 Connection 對象 con——下面的代碼來完成這項工作。
  
  Statement stmt = con.createStatement();
  
  到目前為止,我們已經有了一個 Statement 對象,但是還沒有將對象傳遞到 DBMS 的 SQL 語句。
  
  當數據庫接收到語句時,數據庫引擎首先會分析該語句并查找句法錯誤。一旦完成對語句的分析,數據庫就必須計算出執行它的最有效方法。在計算上,這可能非常昂貴。數據庫會檢查哪些索引可以提供幫助,假如存在這樣的索引的話,或者檢查是否應該完全讀取表中的所有行。數據庫針對數據進行統計,找出最佳的執行方式。一旦創建好查詢計劃,數據庫引擎就可以執行它。
  
  生成這樣一個計劃會占用 CPU 資源。理想情況是,假如我們兩次發送相同的語句到數據庫,那么我們希望數據庫重用第一個語句的訪問計劃,我們可以使用 PreparedStatement 對象來獲得這種效果。
  
  這里有一個主要的特性是,將 PreparedStatement 與其超類 Statement 區別開來:與 Statement 不同,在創建 PreparedStatement 時,會提供一個 SQL 語句。然后了立即將它發送給 DBMS,在那里編譯該語句。因而, PreparedStatement 實際上是作為一 個通道與連接和被編譯的 SQL 語句相關聯的。
  
  那么,它的優勢是什么呢?假如需要多次使用相同的查詢或者不同參數的類似查詢,那么利用 PreparedStatement,語句,只需被 DBMS 編譯和優化一次即可。與使用正常的 Statement 相比,每次使用相同的 SQL 語句都需要重新編譯一次。
  
  還可以通過 Connection 方法創建PreparedStatement 。下面代碼顯示了如何創建一個帶有三個輸入參數的參數化了的 SQL 語句。
  
  Prepa

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
69视频在线播放| 亚洲影视中文字幕| 久久九九亚洲综合| 欧美日韩第一页| 欧美日韩中文字幕在线| 麻豆成人在线看| 久久成人综合视频| 亚洲一区二区中文| 国产一区二区日韩精品欧美精品| 国产亚洲精品久久久| 亚洲影视九九影院在线观看| 久久五月天综合| 亚洲天堂影视av| 亚洲人成网站色ww在线| 成人a级免费视频| 日本欧美一二三区| 欧美大片在线免费观看| 亚洲美女视频网| 久久成人国产精品| 欧美中文在线字幕| 国产精品美女在线观看| 欧美性生交大片免网| 精品中文字幕在线2019| 91免费的视频在线播放| 色偷偷偷亚洲综合网另类| 国内精品久久久久久影视8| 欧美电影在线观看| 精品久久久久久电影| 久久久999成人| 26uuu国产精品视频| 国产91亚洲精品| 久久精品久久久久| 欧美综合在线第二页| 国产精品三级在线| 亚洲丁香婷深爱综合| 亚洲第一精品夜夜躁人人爽| 亚洲最大成人在线| 欧美电影在线观看| 成人黄色av免费在线观看| 欧美性一区二区三区| 国产日韩亚洲欧美| 这里只有精品在线观看| www.亚洲人.com| 91影院在线免费观看视频| 亚洲精品国产美女| 欧美高清无遮挡| 日韩精品在线观看网站| 精品国产一区二区三区久久狼5月| 日韩在线视频观看正片免费网站| 91精品国产亚洲| 国产精品aaaa| 国产一区二区三区在线免费观看| 国产精品视频久久| 成人妇女淫片aaaa视频| 欧美剧在线观看| 国产精品视频永久免费播放| 91在线免费观看网站| 国产精品丝袜高跟| 这里只有精品在线播放| 欧美资源在线观看| 亚洲精品电影网在线观看| 精品久久久久久久久中文字幕| 日韩免费观看高清| 91久久久精品| 少妇av一区二区三区| 高清日韩电视剧大全免费播放在线观看| 亚洲精品视频免费| 91精品国产九九九久久久亚洲| 国产精品69久久| 亚洲一区二区三区在线视频| 亚洲综合一区二区不卡| 欧美精品精品精品精品免费| 欧美午夜影院在线视频| 亚洲色图激情小说| 国产精品久久久久久久久久尿| 欧美日韩国产成人在线| 亚洲午夜未删减在线观看| 国内精品久久久久影院 日本资源| 欧美国产第二页| 欧美日韩亚洲一区二| 日韩精品在线第一页| 国产精品成人va在线观看| 精品国产乱码久久久久久天美| 欧美视频在线观看免费| 不卡伊人av在线播放| 91在线直播亚洲| 国产精品草莓在线免费观看| 伊人伊人伊人久久| 欧美专区在线观看| 91久久精品久久国产性色也91| 亚洲午夜国产成人av电影男同| 日韩av在线播放资源| 欧美大胆a视频| 亚洲欧美日韩精品久久| 成人欧美一区二区三区黑人孕妇| 中文字幕日韩电影| 久久婷婷国产麻豆91天堂| 欧洲美女7788成人免费视频| 久久中文精品视频| 中文字幕亚洲综合久久| 欧美精品18videosex性欧美| 国产精品视频不卡| 欧美高跟鞋交xxxxhd| 91超碰中文字幕久久精品| 欧美综合国产精品久久丁香| 欧美激情日韩图片| 欧美剧在线观看| 国产日韩换脸av一区在线观看| 日韩在线www| 成人黄色免费看| 欧美丝袜一区二区| 国产精品69精品一区二区三区| 亚洲国产精品电影在线观看| 日韩精品有码在线观看| 久久久精品美女| 最近的2019中文字幕免费一页| 中文字幕久热精品在线视频| 久久久久久久久久久免费精品| 日韩免费不卡av| 精品视频—区二区三区免费| 欧美肥臀大乳一区二区免费视频| 法国裸体一区二区| 国产精品国产三级国产专播精品人| 精品国产乱码久久久久久天美| 午夜精品三级视频福利| 国产精品私拍pans大尺度在线| 亚洲一区二区久久久| 欧美精品免费在线| 久久中文久久字幕| 久久久久国产精品一区| 成人免费淫片aa视频免费| 懂色av影视一区二区三区| 国产福利成人在线| 日韩三级影视基地| 欧美福利小视频| 欧美第一黄网免费网站| 日本精品一区二区三区在线播放视频| 日韩亚洲欧美中文在线| 欧美激情乱人伦| 色综合视频一区中文字幕| 日韩亚洲国产中文字幕| 欧美性做爰毛片| 久久精品人人做人人爽| 日韩电影中文字幕在线| 91视频免费网站| 免费97视频在线精品国自产拍| 国产精品视频区1| 亚洲国产日韩欧美在线动漫| 亚洲精品成人久久久| 欧美xxxx14xxxxx性爽| 国产精品小说在线| 2019最新中文字幕| 国产+人+亚洲| 久久视频在线免费观看| 久久精品91久久香蕉加勒比| 欧美性xxxxxxx| 国产精品久久久久一区二区| 庆余年2免费日韩剧观看大牛| 久久久久久久久亚洲| 亚洲另类欧美自拍| 国产欧美日韩中文| 日本高清视频精品| 欧美性猛交xxxx黑人猛交| 97超级碰碰碰久久久|