JDBC 4.0具有哪些新特性?
下面按照上述四类展开详述:
驱动及连接管理
驱动及连接的使用和结果集管理 — 在 JDBC 的很多地方都发生了显著的变化
连接数据库变得更加容易
如果您曾经有过 JDBC 开发的经验 , 那么我确信您还保存着一份建立数据库连接所必须的工作列表 . 而列表中的第一项即加载一个合适的驱动程序 . 您是否想过这个步骤应该被改进呢 ? 在此版 JDBC 中做到了 . 您不必再显式地加载 Class.forName 了 . 当您的程序首次试图连接数据库时 , DriverManager 自动加载驱动到当前应用的 CLASSPATH . 这是 JDBC 的一个比较大的改动 .
尽管 DriverManager 现在可以自动地加载驱动 , 建立一个 DataSource 对象 仍是获取连接的推荐的方法 . 因为可以在配置中将数据源指向不同的数据库, DataSource 更具透明性和灵活性。 这样就可以访问另一个数据库实例不需更改现有的任意一行代码 , 甚至数据库的驱动完全不同也没有关系 .
ResultSet 的使用变得更为灵活
ResultSet 接口的层次结构当前为编程的灵活性提供了一些新的机制 . RowSet 子接口滚动、可提交并可离线编辑的 ResultSet . WebRowSet 子接口提供了从数据库表中获取数据 , 并将其序列化为 XML 文档 , 抑或是将 XML 解析成 result set 的能力 . 尽管上个版本的 JDBC 也提供了 RowSet 接口层次 ,当前的版本对于 SQLXML 数据类型支持得更好 ( 稍后讨论 ) ,这些特性是的 JDBC 编程更加容易且具灵活性 .
提供了更多的 API
本版 JDBC 提供了更多的 API 以实现访问 SQL:2003 具备的新特性 . 此外 , 为了更好的操纵修改数据, JDBC 也增添了许多的方法。 .
现在我们来看一些代码并讨论下面 Example1 类的输出结果 . 它将连接嵌入式的 Apache Derby 数据库并在控制台上显示输出结果 . 尽管 JDBC 4.0 已推出几个月了 , 笔者发现只有 Apache Derby 提供了支持 JDBC 4.0 规范的驱动 ( 截至 2007 年 3 月 ). 本文的所有例子均用 JDK 1.6 和 Apache Derby 数据库 10.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
如果想看 DriverManager 如何自动加载 JDBC 驱动 , 可以将 Example1 中的: con=ds.getConnection() 替换为: con=DriverManager.getConnection(connectionURL) . 该类将产生相同的输出。正如您所看到的,再也不用显式地调用 Class.forName() 了 .
欢迎转载,请注明出处:亲亲宝宝