JDBC 架構:
JDBC 的 API 支持兩層和三層處理模式進行數據庫的訪問,但是一般的JDBC架構由兩層處理模式組成。
(1)JDBC API:提供了應用程序對 JDBC 管理器的連接
(2)JDBC Driver API:提供了 JDBC 管理器對驅動程序連接
結構圖見 jdbc結構圖.png
JDBC 的 API 提供了以下接口和類:
DriverManager :這個類管理一系列數據庫驅動程序。匹配連接使用通信子協議從 JAVA 應用程序中請求合適的數據庫驅動程序。
識別 JDBC 下某個子協議的第一驅動程序將被用於建立數據庫連接。
Driver : 這個接口處理與數據庫服務器的通信。你將很少直接與驅動程序互動。
相反,你使用 DriverManager 中的對象,它管理此類型的對象。它也抽象與驅動程序對象工作相關的詳細信息。
Connection : 此接口具有接觸數據庫的所有方法。該連接對象表示通信上下文,即,所有與數據庫的通信僅通過這個連接對象進行。
Statement : 使用創建於這個接口的對象將 SQL 語句提交到數據庫。除了執行存儲過程以外,一些派生的接口也接受參數。
ResultSet : 在你使用語句對象執行 SQL 查詢後,這些對象保存從數據獲得的數據。它作為一個迭代器,讓您可以通過它的數據來移動。
SQLException : 這個類處理發生在數據庫應用程序的任何錯誤。
創建 JDBC 應用程序的步驟:
1.導入數據包
2.注冊 JDBC 驅動器(包括獲取驅動,注冊驅動(各大廠商已實現))
3.通過驅動管理器獲取連接
4.執行查詢
5.提取結果數據
6.清理環境
常用的 JDBC 驅動名和數據庫 URL:
RDBMS JDBC 驅動程序名稱 URL 格式
MySQL com.mysql.jdbc.Driver jdbc:mysql://hostname/ databaseName
ORACLE oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:@hostname:port Number:databaseName
DB2 COM.ibm.db2.jdbc.net.DB2Driver jdbc:db2:hostname:port Number/databaseName
Sybase com.sybase.jdbc.SybDriver jdbc:sybase:Tds:hostname: port Number/databaseName
Statement 對象:
創建了數據庫連接,就可以與數據庫進行交互。
JDBC 的 Statement,CallableStatement 和 PreparedStatement 接口定義的方法和屬性,可以讓你發送 SQL 命令或 PL/SQL 命令到數據庫,並從你的數據庫接收數據。
接口 推薦使用
Statement 可以正常訪問數據庫,適用於運行靜態 SQL 語句。 Statement 接口不接受參數。
PreparedStatement 計劃多次使用 SQL 語句, PreparedStatement 接口運行時接受輸入的參數。
CallableStatement 適用於當你要訪問數據庫存儲過程的時候, CallableStatement 接口運行時也接受輸入的參數。
Java數據類型、JDBC數據類型、Sql數據類型
JDBC驅動程序在將 Java數據類型發送的數據庫之前,首先會轉換為JDBC類型,然後JDBC類型轉換為數據庫數據類型。
當通過調用 PreparedStatement 的 setXxx()方法時,Java 數據類型會轉換為默認的 Jdbc數據類型。
Java SqlDateTime:
Java Date: JanuaryTue Aug 18 13:46:02 GMT+04:00 2009
Sql Date: January 1, 2003
Sql Time: 2:00pm
Sql Timestamp: January 1, 2003 2:00pm
默認情況下,JDBC連接處於自動提交模式。
但是有三個原因你想關掉自動提交模式,管理自己的事務:
為了提高性能
為了保持業務流程的完整性
使用分布式事務
若要使用手動事務模式,使用 Connection 對象的 SetAutoCommit(false) 方法。
提交:conn.commit()。
回滾:conn.rollback()。
回滾還原點:
通過setSavepoint(String savepointName) 來設置一個還原點,通過conn.rollback(savepointName) 來回滾到對應還原點。
刪除還原點:
通過 releaseSavepoint(Savepoint savepointName) 來刪除一個還原點。
批處理:
將關聯的Sql 語句組合成一個批處理,並將它們當成一個調用提交給數據庫。減少了通信資源的消耗,提高了性能。
Statement、PreparedStatement、CallableStatement的addBatch() 方法用於添加單個語句(可以是不同的語句)到批處理。
executeBatch() 方法用於啟動執行所有組合到一起的語句。返回一個整數數組,數組中每個元素代表了各自的更新語句的更新數目。
批處理和 Statement 對象
使用 createStatement() 方法創建一個 Statement 對象。
使用 setAutoCommit() 方法將自動提交設為 false。
被創建的 Statement 對象可以使用 addBatch() 方法來添加你想要的所有SQL語句。
被創建的 Statement 對象可以用 executeBatch() 將所有的 SQL 語句執行。
最後,使用 commit() 方法提交所有的更改。
批處理和 PrepareStatement 對象
使用占位符創建 SQL 語句。
使用任一 prepareStatement() 方法創建 prepareStatement 對象。
使用 setAutoCommit() 方法將自動提交設為 false。
被創建的 Statement 對象可以使用 addBatch() 方法來添加你想要的所有 SQL 語句。
被創建的 Statement 對象可以用 executeBatch() 將所有的 SQL 語句執行。
最後,使用 commit() 方法提交所有的更改。