JDBC4.0新特性

 

在Java SE 6中有許多新的特性,其中一點就是將Java Database Connectivity(JDBC) API類庫升級到JDBC4.0。Java社區JSR-211規範中的JDBC4.0規範提供了更加易於管理的和靈活的數據庫操作,以及提供了對更加複雜數據類型的支持,例如XML類型的字段。本文章介紹一些JDBC4.0規範中的一些新特性的用法。
JDBC4.o規範中的新特性
JDBC4.0規範中列出了20種的新特性,這些特性中有一些是主要的,另外一些是相對次要一些的。這些特性在本篇文章中並不能夠一一介紹,所以將這些特性按照功能分爲如下的幾個方面。
1    驅動和連接管理
2    異常處理
3    數據類型的支持
4    API的一些變化
在下面的文章中對這些特性介紹給大家。
驅動和連接管理
使用連接和管理結果集是JDBC4.0中驅動和鏈接管理方面重要的變化。下面的三個方面將說明這些變化。
獲得數據庫鏈接變得更加的容易
如果你使用過JDBC編寫代碼,那麼你一定非常瞭解使用JDBC連接數據庫的步驟,在這些步驟中第一步要做的就是加載驅動程序。通過Class.forName("")方法來加載驅動程序。在JDBC4.0中你不需要做這個步驟了,也就是不需要通過Class.forName來加載驅動程序。當你的應用第一次連接數據庫的時候,DriverManager會自動的到類路徑下去搜索驅動程序。這個特點是JDBC4.0中最中的變化之一。
既然DriverManager可以自動的加載驅動程序,並且返回合適的DataSource對象,通過DataSource對象獲得和數據庫的連接。所以,在應用中如果你要其它的數據庫將變得很容易,你不需要對代碼做任何改動就可以獲得連接。加載不同的數據庫驅動的工作交給了DriverManager來完成。
使用ResultSet變得更加的靈活
在ResultSet接口中提了一些新的特性功能,使得編寫程序變得更加的靈活。RowSet子接口提供了可翻頁、可修改和離線可編輯的ResultSet。WebRowSet子接口提供了可以從數據庫表中讀取數據並序列化成XML文檔以及從XML文檔反序列化成ResultSet的功能。
更多的API的支持
更多的API支持增加到JDBC4.0規範中,來支持SQL2003規範。另外,根據接口中定義功能加入了一些新的方法,使得操作數據變得更加的容易。下面我們通過下面的代碼來討論對結果的處理。這段代碼將連接內置的一個Apache Derby數據庫並且將查詢結果在控制檯上顯示出來。即使JDBC4.0已經推出了幾個月了,但是目前對JDBC4.0規範支持的數據庫還不多,只有Derby數據有支持。下面所有的例子都是基於JDK1.6和Apache Derby10.2.2.0。
public class Example1 {
 public static void main(String[] args) {
    ...
    String dbName = "example1";
    String tableName = "stu1";
    ds = new EmbeddedDataSource40();
    ds.setDatabaseName(dbName);
    String connectionURL = "jdbc:derby:"+dbName+";create=true";
    try {
      con = ds.getConnection();
      stmt = con.createStatement();
      rs = stmt.executeQuery("select * from "+tableName);
      int colCount= rs.getMetaData().getColumnCount();
      for (int j=0; j< colCount; j++){
        System.out.print(rs.getMetaData().getColumnName(j+1)
          + "/t");
      }
      while (rs.next()) {
        System.out.print("/n");
        for (int i = 0; i < colCount; i++) {
         System.out.print(rs.getString(i + 1) + "/t");
        }
      }
     } catch (SQLException e) {
           e.printStackTrace();
         }
     finally{
      //close connections
     }
   }
}
如果你在
example1數據庫中含有一個表stu1,那麼編譯並運行上面的Example1.java文件將會在控制檯上得到如下的結果:
ID    NAME            COURSE
1001 John Doe        Statistics    
1002 Jack McDonalds Linear Algebra
異常處理
如何增加Java代碼的可靠性?在我看來,通過使用異常處理是最重要的方法之一。通過在程序中加入異常處理可以有效的提高Java代碼的可靠性和魯棒性。JDBC4.0中加入了一些簡單但是功能強大的異常處理特性。包括對異常鏈的支持以及對for-each加強性for循環中異常鏈處理的支持。下面的Example2中就說明了對異常鏈處理的方法。

public class Example2 {
 public static void main(String[] args) {
    String dbName = "example";
    String tableName = "student4";
    try {
      con = ds.getConnection();
          stmt = con.createStatement();
      rs = stmt.executeQuery("select * from " + tableName);
    } catch (SQLException sx) {
      for(Throwable e : sx ) {
        System.err.println("Error encountered: " + e);
      }
    }
    finally{
      //close connections
    }
 }
}
運行上面的程序,將表明指定爲student4,但是數據庫中並沒有這個表。所以程序將出現異常。異常發生的點是。
rs = stmt.executeQuery("select * from " + tableName);
一般情況下,出現了這樣的異常,你需要捕獲它,並做出處理。在這個例子中我們只是簡單將異常信息打印出來。

for(Throwable e : sx ) {
 System.err.println("Error encountered: " + e);
}
程序運行後的輸出是:
Error encountered: java.sql.SQLSyntaxErrorException:
   Table/View 'STUDENT4' does not exist.
Error encountered: java.sql.SQLException:
   Table/View 'STUDENT4' does not exist.
Exception in thread "main" java.lang.NullPointerException
   at ex.Examlpe2.main(Examlpe2.java:51)
通過以上的例子我們可以看出來,JDBC4.0提供了對異常鏈中異常的處理,包括對加強型循環的支持。並不是像以前那樣必須通過使用getNextException來獲得異常信息。
數據類型的支持
JDBC4.0版本提供了對新的數據類型的支持。特別的是對XML類型(SQLXML)的數據提供了支持。
SQLXML類型和XML的支持
SQLXML是Java程序中用來映射XML類型數據和SQL類型數據的類。XML類型是數據庫中的內置類型,用來存儲XML類型的數據。下面的Example3中,說明了如何從當前連接中獲得SQLXML對象並更新數據到表中。
public class Example3 {
    public static void main(String[] args) {
      ...
      con = ds.getConnection();
      SQLXML sx= con.createSQLXML();
      sx.setString("Math is Fun");
      String psx ="insert into "+tableName+
        " ( id, textbook) values(?,?) ";
      PreparedStatement pstmt = con.prepareStatement(psx);
      pstmt.setString(1,"1000");
      pstmt.setSQLXML(2,sx);
      pstmt.executeUpdate();
          ...
      }
    }

 

冠爾培訓:http://www.javalord.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章