JDBC基礎理論與實踐

Creative Commons License
本作品採用知識共享署名-非商業性使用-相同方式共享 2.5 中國大陸許可協議進行許可。

 

 

Java技術中,JDBC是所有數據庫操作的基礎,不管是iBATIS還是Hibernate,其基礎無不來自於JDBC。掌握了JDBC,對通用庫的理解就簡單了。

一. 數據庫連接器

數據庫連接器(java.sql.Connection)是JDBC操作的核心,一次完整的數據庫操作均起始於數據庫連接器。

有多種方式創建數據庫連接器,基本方式有兩種:DriverManager方式和DataSource方式。其中DriverManager是最原始的連接方式;DataSource方式統一了接口,通過不同的實現完成更多的任務,如Apache的DBCP就在DataSource基礎上提供了強大的緩衝池技術,大大提高了創建數據庫連接器的速度。

創建數據庫連接器時需要提供四個基本數據,分別爲

JDBC驅動:driverClassName
數據庫連接字:url
數據庫訪問所需要的用戶名:username
數據庫訪問所需要的密碼:password

其中

JDBC驅動的值可以是:

MySQL:"com.mysql.jdbc.Driver"
PostgreSQL:"org.postgresql.Driver"
Oracle:"oracle.jdbc.driver.OracleDriver"
Sybase:"com.sybase.jdbc2.jdbc.SybDriver"
SQLServer:"com.microsoft.jdbc.sqlserver.SQLServerDriver"
DB2:"com.ibm.db2.jdbc.net.DB2Driver"

數據庫連接字的值可以是:

MySQL:"jdbc:mysql://DbComputerNameOrIP:3306/DbName"
PostgreSQL:"jdbc:postgresql://DbComputerNameOrIP:3306/DbName"
Oracle:"jdbc:oracle:thin:@DbComputerNameOrIP:1521:DbName"
Sybase:"jdbc:sybase:DbName:DbComputerNameOrIP:2638"
SQLServer:"jdbc:microsoft:sqlserver://DbComputerNameOrIP:1433;databaseName=DbName"
DB2:"jdbc:db2://DbComputerNameOrIP/DbName"

以DriverManager方式創建數據庫連接器的代碼如下:

以DataSource方式創建數據庫連接器的代碼如下:

  

二. SQL聲明

在一個數據庫連接器中,我們可以調用多條SQL語句。每一條SQL語句的執行由一個SQL聲明(java.sql.Statement)完成。

數據庫連接器有三種聲明SQL的方式:一般聲明、預編譯聲明和存儲過程聲明。幾種聲明的本質區別在於SQL語句的指定時機,一般聲明在執行時指定SQL語句,而後兩種聲明則在創建時指定SQL語句。

SQL聲明的執行方式又分兩種:基於檢索的executeQuery方法,用於SELECT語句;以及基於變更的executeUpdate方法,用於INSERT、UPDATE、DELETE語句。同時還提供了通用性更強的execute方法。

一般聲明

創建一個一般聲明很簡單,代碼如下:

 

一般聲明通過executeQuery執行一個查詢語句(包括SELECT),查詢語句的執行結果以結果集(java.sql.ResultSet)的形式提供。代碼如下:

上述代碼也可用如下方式完成:

 

一般聲明通過executeUpdate執行一個更新語句(包括UPDATE、INSERT、DELETE),通過更新操作影響到的元素個數決定成功與否。代碼如下:

上述代碼也可用如下方式完成:

 

預編譯聲明

與一般聲明不同,預編譯聲明則是在執行前將SQL語句進行預處理,其最大的用處在於可將SQL語句參數化。創建預編譯聲明時需要指定一個SQL語句,語句中不確定的參數用“?”表示,參數根據序號(以1開始)通過一系列set方法設置。預編譯聲明的執行操作與一般聲明類似但不提供參數。代碼樣例如下:

    

 

存儲過程聲明

存儲過程(Stored Procedure)屬於數據庫技術,存儲過程直接保存在數據庫中,由數據庫對其進行優化。數據庫連接器通過prepareCall創建存儲過程聲明。代碼如下:

 

關於存儲過程聲明的詳細用法,可參考:
http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0802tiwary/

 

三. 事務處理

根據業務的不同多個SQL聲明可以組成一個事務,在一個事務中保證了其中的所有SQL聲明或者全部執行成功或者都不執行。簡單的說,事務就是把一件事情分成幾個步驟,並且確保這件事情的所有步驟要麼全部做完,要麼就全部都沒做,不存在只做了其中幾個步驟的可能。

在JDBC中事務的處理由數據庫連接器完成,事務處理的最小單元就是一個SQL聲明。數據庫連接器中針對事務的操作有兩種:commit及rollback。commit使SQL聲明的執行立即生效而rollback則使執行了的SQL聲明無效。

根據業務的不同,數據庫連接器提供兩種處理事務的策略:自動提交與手動提交。默認情況下,數據庫連接器的事務處理策略是自動提交,在自動提交模式下,commit及rollback不必手動調用。JDBC會爲每一個SQL聲明提供獨立的事務,執行每一個聲明時立即commit,並在出現錯誤時自動rollback。這種傳統的提交方式不能完成我們對事務的要求,所以我們必須用手動提交的方式完成事務處理。手動提交模式需要根據業務邏輯在適當的位置調用commit及rollback方法。將數據庫連接器的事務處理策略設置爲手動提交的代碼如下:

 

發佈了27 篇原創文章 · 獲贊 15 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章