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
     }
   }
}
如果你在
example 1 数据库中含有一个表 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
    }
 }
}
运行上面的程序,将表明指定为 student 4 ,但是数据库中并没有这个表。所以程序将出现异常。异常发生的点是。
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值