轉(zhuǎn)載請注明出處:http://www.tkk7.com/nake/
???自從
java
發(fā)布的第一個版本開始就已經(jīng)包含
JDBC
了。目前已經(jīng)有
10
個年頭了。
JDBC4.0
將要被打包到
java6.0
里(
java SE
是
J2SE
新的名字)。它展現(xiàn)設(shè)計的重大提升和提供更加豐富的
API
,更加重視簡易開發(fā)和提高生產(chǎn)力
。
??????
本文將討論一些
JDBC
在改善設(shè)計和提高性能上的重要的變化。但是不能列舉每一個變化。
注解和泛型
我想你已經(jīng)了解了包含在
JAVA 5.0
的注解(
annotations
)
和泛型(
generic
也有翻譯范型)。
JDBC4.0
也引進了注解和泛型
DataSet
,這使得執(zhí)行
sql
語句和
SQL? DML
(
data manipulation? language
)
定義變的簡單。
??????
在新的
API
里定義了一套
Query
和
DataSet
接口。
Query
接口定義了一套方法,這些方法描述了
SQL
的
select
和
update
語句。而且詳細介紹了結(jié)果集如何綁定為一個
DataSet
的。因為泛型所以
DataSet
是可以帶參數(shù)的。因此可以說
DataSet
接口是類型安全的(
type-saft
)
.
所有
Query
接口都要從
BaseQuery
接口繼承??梢酝ㄟ^
Connection.createQueryObject()
或者
DataSource.createQueryObject()
得到Query對象。
一個DataSet接口都繼承java.util.List。
? DataSet
是有列概念的數(shù)據(jù)集,能從
Query
接口得到,并且可以帶有參數(shù)。
DataSet
可以在連接和斷開連接的情況下使用。從而
DataSet
實現(xiàn)了
ResultSet
(連接)
或者
?
CachedRowSet
(可以斷開連接)。因為DataSet是java.util.List的子接口,所以可以通過java.util.Iterator來訪問每一行。
DataSet
接口可以帶系統(tǒng)或者用戶自己定義的類作為參數(shù)。通過兩種方法你可以實現(xiàn):構(gòu)造函數(shù)或者
JavaBeans
對象,任何一個辦法都能達到將用戶自定義的類綁定到結(jié)果集的列里。但是在其它支持
JavaBeans
的框架里,用
JavaBeans
對象的實現(xiàn)就顯更加容易使用。
下面簡單舉例說明如何通過新的
API
創(chuàng)建和運行
SQL
查詢。用用戶自定義的類來定義結(jié)果集。(拷貝時候小心有制表符)
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;
?? }
?? pubic String lastName() {
??????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 ();
?
異常處理的增強:
1.??????
為
SQLException
分為兩類
transient
和
non-transient
。
2.??????
支持連鎖的異常。
3.??????
繼承了
Iterable
接口。
因為繼承了Iterable 所以你可以這樣寫:
catch(SQLException ex) {
?? for(Throwable t : ex) {
??????System.out.println("exception:" + t);
?? }
}
參考
http://www.javaworld.com/javaworld/jw-05-2006/jw-0501-jdbc.html
JSR 221: JDBC 4.0 Specification:
http://www.jcp.org/en/jsr/detail?id=221
未完
posted on 2006-05-11 22:26
nake 閱讀(6768)
評論(4) 編輯 收藏