麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發(fā)設計 > 正文

探討JDBC 4.0在設計和性能方面的改進

2019-11-18 13:34:06
字體:
來源:轉載
供稿:網(wǎng)友
摘要 JDBC(java數(shù)據(jù)庫連接)4.0預計在2006年中期作為Java 6.0標準版的一部分正式發(fā)行。現(xiàn)在,我們大家都關心的問題是,如何利用這一新的規(guī)范來改進Java應用程序數(shù)據(jù)存取和交互方面的設計與性能。本文將與你一起探討JDBC 4.0中引入的新特征,討論它對一些現(xiàn)有問題的解決方案,并且通過具體示例展示它在設計和性能方面的改進。

  自從核心Java語言的第一個公開發(fā)行版本起,JDBC(Java數(shù)據(jù)庫連接)已經(jīng)經(jīng)歷了十年的發(fā)展歷程。它的當前版本4.0(將與Java標準版本6.0一起打包發(fā)行)提供了一組更為豐富的API,主要目的在于改進軟件開發(fā)的設計和性能。

  本文將重點討論JDBC 4.0規(guī)范在設計和性能方面的改進。

  一、 注釋和泛型DataSet

  在本文中,我假定你已經(jīng)了解注釋和泛型。其實,這兩個概念是隨著J2SE 5.0的發(fā)行一同引入的;與此同時,JDBC 4.0中引入了注釋和泛型DataSet。這一變化的主要目的是為了簡化SQL查詢和SQL DML(數(shù)據(jù)操縱語言)語句的執(zhí)行。

  新一代API定義了一組Query和DataSet接口。這個Query接口定義了一組帶有JDBC注釋的方法。這些帶有注釋的方法描述了SQL select和update語句,并且指定應該如何把結果綁定到一個DataSet上。這個DataSet接口是一個通過泛型定義實現(xiàn)的參數(shù)化類型,也為結果集數(shù)據(jù)提供一種類型安全的定義。

  所有的Query接口都繼續(xù)自BaseQuery接口。你可以使用Connection.createQueryObject()或DataSource.createQueryObject()方法(這兩個方法都使用一個Query接口類型作為它的參數(shù))來具體實現(xiàn)這樣的接口。

  一個DataSet接口繼續(xù)自java.util.List;該接口使用一個描述結果集數(shù)據(jù)列的數(shù)據(jù)庫(該數(shù)據(jù)庫是通過Query接口的一個注釋的方法返回的)作為它的參數(shù)類型。在連接方式和非連接方式下都可以操作和使用DataSet。因此,根據(jù)使用的是連接方式還是非連接方式,這個DataSet也分別相應地實現(xiàn)為一個ResultSet或CachedRowSet。DataSet,作為java.util.List的一個子接口,答應使用Iterator模式通過java.util.Iterator接口存取其數(shù)據(jù)行。

  你可以用兩種方式來指定數(shù)據(jù)類或用戶定義類(作為DataSet接口的一個參數(shù)類型)-作為一個結構或作為一個JavaBeans對象。無論哪一種方式都能夠把結果集數(shù)據(jù)列綁定到用戶定義的類定義上;但是,JavaBeans組件模型更漂亮些,并且更利于對象定義在另外的支持JavaBeans模型的框架中的重用。

  列表1摘自本文示例中的代碼片斷,它展示了如何使用這種新型的API來創(chuàng)建和運行SQL查詢:使用一個用戶定義類定義結果集數(shù)據(jù),并且把返回的結果集綁定到用戶定義的描述中。

  列表1.Employee用戶定義類型與employeeQueries接口

pubic class Employee {
 PRivate int employeeId;
 private String firstName;
 private String lastName;
 public int getEmployeeId() {
  return employeeId;
 }
 public setEmployeeId(int employeeId) {
  this.employeeId = employeeId;
 }
 public String getFirstName() {
  return firstName;
 }
 public setFirstName(String firstName) {
  this.firstName = firstName;
 }
 public String getLastName() {
  return lastName;
 }
 public setLastName(String lastName) {
  this.lastName = lastName;
 }
}
interface EmployeeQueries extends BaseQuery {
 @Select (sql="SELECT employeeId, firstName, lastName FROM employee")
 DataSet<Employee> getAllEmployees ();
 @Update (sql="delete from employee")
 int deleteAllEmployees ();
}
Connection con = ...
EmployeeQueries empQueries = con.createQueryObject (EmployeeQueries.class);
DataSet<Employee> empData = empQueries.getAllEmployees ();
  二、 改進異常處理能力

  在JDBC API 4.0以前的版本中,異常處理功能極其有限。對于所有類型的錯誤都會籠統(tǒng)地拋出一個SQLException異常-根本不存在異常的具體分類,且沒有相應的層次定義。所以這時,你唯一能夠得到一些有意義的信息的辦法是檢索和分析SQLState值。另一方面,SQLState值及其相應的含義會因不同的數(shù)據(jù)源而有所改變;因此,要想追蹤到問題的"根部"并且有效地處理異常是一件非常乏味的任務。

  JDBC 4.0改進了異常處理能力,同時也緩解了一些前面提到的問題。其中的要害改進有:

  · 把SQLException分成短暫異常和非短暫異常兩種類型

  · 支持鏈式異常

  · 實現(xiàn)Iterable接口

  當一個以前失敗的操作檢索成功時,將會拋出SQLTransientException異常;而在檢索不成功時將會拋出SQLNonTransientException異常-除非導致SQLException的原因得到糾正。

  圖1展示了子類SQLTransientException和SQLNonTransientException。



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产成年人网站 | aa国产视频一区二区 | 久久精品视频12 | 久久国产夫妻视频 | 久久小视频| 99爱视频在线观看 | 亚洲免费高清 | 369看片你懂的小视频在线观看 | 国产精品久久久久久婷婷天堂 | 男女一边摸一边做羞羞视频免费 | 亚洲人成在线播放网站 | 久久另类视频 | 欧美黑大粗硬毛片视频 | 免费毛片视频播放 | 日韩激情一区 | 青草久久网 | 久久精品视频网站 | 久久综合久久综合久久综合 | 亚洲一区二区中文字幕在线观看 | 99精品国产一区二区三区 | 成人在线精品视频 | 久久久精品视频免费 | 一级毛片在线看 | 一区二区三区日韩电影 | 免费观看一区二区三区视频 | 黄色视频一级毛片 | 欧美精品毛片 | 毛片视频大全 | 国产91在线免费 | 爽妇网国产精品 | xp123精品视频 | 亚洲成人福利电影 | 国产69久久久 | 羞羞视频免费视频欧美 | 国产69精品久久久久孕妇黑 | 精品999www | 国产日本在线播放 | 激情视频免费观看 | 欧美精品久久久久久久久久 | 55夜色66夜色国产精品视频 | 国产一级一级 |