java.sql

java.sql

提供使用 JavaTM 程式語言訪問並處理存儲在數據源(通常是一個關係資料庫)中的數據的 API。此 API 包括一個框架,憑藉此框架可以動態地安裝不同驅動程式來訪問不同數據源。

基本介紹

  • 中文名:java.sql
  • 用於:將 SQL 語句傳遞給資料庫
  • 性質:API
  • 分類:SQL 類型
描述,sql包內容,JDBC內容,TM3.0API,TM4.0API,JDBC特性,4.0特性,3.0特性,2.1特性,用途,JDBCAPI,JDBC,優缺點,支持,一致性,

描述

JDBC TM API 主要用於將 SQL 語句傳遞給資料庫,但它還可以用於以表格方式從任何數據源中讀寫數據。通過接口的 javax.sql.RowSet 組可以使用的 reader/writer 實用程式,可以被定製以使用和更新來自電子表格純文本檔案或其他任何表格式數據源的數據。

sql包內容

java.sql 包中包含用於以下方面的 API:
通過 DriverManager 實用程式建立與資料庫的連線
DriverManager 類:建立與驅動程式的連線
SQLPermission 類:代碼在 Security Manager(比如 applet)中運行時提供許可權,試圖通過 DriverManager 設定一個記錄流
Driver 接口:提供用來註冊和連線基於 JDBC 技術(“JDBC驅動程式”)的驅動程式的 API,通常僅由 DriverManager 類使用
DriverPropertyInfo 類:提供 JDBC 驅動程式的屬性,不是供一般用戶使用的向資料庫傳送 SQL 語句
Statement:用於傳送基本 SQL 語句
PreparedStatement:用於傳送準備好的語句或基本 SQL 語句(派生自 Statement)
CallableStatement:用於調用資料庫存儲過程(派生自 PreparedStatement)
Connection 接口:提供創建語句以及管理連線及其屬性的方法
獲取和更新查詢的結果
ResultSet 接口
SQL 類型到 Java 程式語言中的類和接口的標準映射關係
Array 接口:SQL ARRAY 的映射關係
Blob 接口:SQL BLOB 的映射關係
Clob 接口:SQL CLOB 的映射關係
Date 類:SQL DATE 的映射關係
NClob 接口:SQL NCLOB 的映射關係
Ref 接口:SQL REF 的映射關係
RowId 接口:SQL ROWID 的映射關係
Struct 接口:SQL STRUCT 的映射關係
SQLXML 接口:SQL XML 的映射關係
Time 類:SQL TIME 的映射關係
Timestamp 類:SQL TIMESTAMP 的映射關係
Types 類:提供用於 SQL 類型的常量
自定義映射 SQL 用戶定義類型 (UDT) 到 Java 程式語言中的類
SQLData 接口:指定 UDT 到此類的一個實例的映射關係
SQLInput 接口:提供用來從流中讀取 UDT 屬性的方法
SQLOutput 接口:提供用來將 UDT 屬性寫回流中的方法
DatabaseMetaData 接口:提供有關資料庫的信息
ResultSetMetaData 接口:提供有關 ResultSet 對象的列的信息
ParameterMetaData 接口:提供有關 PreparedStatement 命令的參數的信息
異常
SQLException:由大多數方法在訪問數據出問題時拋出,以及因為其他原因由其他一些方法拋出
SQLWarning:為了指示一個警告而拋出
DataTruncation:為了指示數據可能已經被截斷而拋出
BatchUpdateException:為了指示並不是批量更新中的所有命令都成功執行而拋出

JDBC內容

TM3.0API

JDBCTM 3.0 API 中包括 java.sql 包,被稱為 JDBC 核心 API,和 javax.sql 包,被稱為 JDBC Optional Package API。完整的 JDBC API 包含在 J2SE 1.4 中。javax.sql 包擴展了 JDBC API 的功能,將它從客戶端API 擴展到伺服器端 API,該包是 JavaTM 2 SDK、企業版 (J2EETM) 技術的重要部分。(注意,J2EE 平台還包括完整 JDBC API;JDBC 3.0 API 中的新特性包含在 J2EE 1.3 版中)。
JDBC(Java Data Base Connectivity,java資料庫連線)是一種用於執行SQL語句的Java API,可以為多種關係資料庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。JDBC為工具/資料庫開發人員提供了一個標準的API,據此可以構建更高級的工具和接口,使資料庫開發人員能夠用純 Java API 編寫資料庫應用程式,同時,JDBC也是個商標名。
有了JDBC,向各種關係數據傳送SQL語句就是一件很容易的事。換言之,有了JDBC API,就不必為訪問Sybase資料庫專門寫一個程式,為訪問Oracle資料庫又專門寫一個程式,或為訪問Informix資料庫又編寫另一個程式等等,程式設計師只需用JDBC API寫一個程式就夠了,它可向相應資料庫傳送SQL調用。同時,將Java語言和JDBC結合起來使程式設計師不必為不同的平台編寫不同的應用程式,只須寫一遍程式就可以讓它在任何平台上運行,這也是Java語言“編寫一次,處處運行”的優勢。
Java資料庫連線體系結構是用於Java應用程式連線資料庫的標準方法。JDBC對Java 程式設計師而言是API,對實現與資料庫連線的服務提供商而言是接口模型。作為API,JDBC為程式開發提供標準的接口,並為資料庫廠商及第三方中間件廠商實現與資料庫的連線提供了標準方法。JDBC使用已有的SQL標準並支持與其它資料庫連線標準,如ODBC之間的橋接。JDBC實現了所有這些面向標準的目標並且具有簡單、嚴格類型定義且高性能實現的接口。
Java 具有堅固、安全、易於使用、易於理解和可從網路上自動下載等特性,是編寫資料庫應用程式的傑出語言。所需要的只是 Java應用程式與各種不同資料庫之間進行對話的方法。而 JDBC 正是作為此種用途的機制。
JDBC 擴展了 Java 的功能。例如,用 Java 和 JDBC API 可以發布含有 applet 的網頁,而該 applet 使用的信息可能來自遠程資料庫企業也可以用 JDBC 通過 Intranet 將所有職員連到一個或多個內部資料庫中(即使這些職員所用的計算機有 Windows、 Macintosh 和UNIX 等各種不同的作業系統)。隨著越來越多的程式設計師開始使用Java 程式語言,對從 Java 中便捷地訪問資料庫的要求也在日益增加。
MIS 管理員們都喜歡 Java 和 JDBC 的結合,因為它使信息傳播變得容易和經濟。企業可繼續使用它們安裝好的資料庫,並能便捷地存取信息,即使這些信息是儲存在不同資料庫管理系統上。新程式的開發期很短。安裝和版本控制將大為簡化。程式設計師可只編寫一遍應用程式或只更新一次,然後將它放到伺服器上,隨後任何人就都可得到最新版本的應用程式。對於商務上的銷售信息服務, Java 和JDBC 可為外部客戶提供獲取信息更新的更好方法。

TM4.0API

java.sql (Java 2 Platform SE 6) JDBC 4.0 API 中包括 java.sql 包,被稱為 JDBC 核心 API,和 javax.sql 包,被稱為 JDBC Optional Package API。完整的 JDBC API 包含在 Java 標準版 (Java SE) 6 版中。javax.sql 包擴展了 JDBC API 的功能,將它從客戶端 API 擴展到伺服器端 API,該包是 Java、企業版 (Java) 技術的重要部分。

JDBC特性

4.0特性

自動 java.sql.Driver 發現:不再需要通過 Class.forName 來載入 java.sql.Driver 類 添加了國家字元集(National Character Set) 支持 為 SQL:2003 XML 數據類型添加的支持 SQLException 增強:為原因鏈添加的支持;為公用 SQLState 類值代碼添加新 SQLException 增強的 Blob/Clob 功能:提供創建和釋放 Blob/Clob 實例以及為了提高可訪問性所添加的一些其他方法 為訪問 SQL ROWID 添加的支持 添加的支持,允許 JDBC 應用程式訪問已被供應商包裝的 JDBC 資源實例,通常在一個應用程式伺服器或連線池環境中。 當與 PooledConnection 關聯的 PreparedStatement 已關閉或驅動程式確定為無效時要通知的可用性

3.0特性

入池語句 (pooled statement):重新使用與某個已入池的連線 (pooled connection) 相關的語句保存點:允許將事務回滾到某一指定保存點 為 ConnectionPoolDataSource 定義的屬性:指定將連線入池的方法 PreparedStatement 對象的參數的元數據 從自動生成的列中獲取值的能力 使從 CallableStatement 對象中返回的多個 ResultSet 對象同時打開的能力 通過名稱和索引標識 CallableStatement 對象的參數的能力 ResultSet 可保存性:指定是否應該讓游標在某一事務結束時保持打開或關閉狀態的能力 獲取和更新 Ref 對象引用的 SQL 結構化類型實例的能力 通過編程方式更新 BLOB、CLOB、ARRAY 和 REF 值的能力。 java.sql.Types.DATALINK 數據類型的添加:允許 JDBC 驅動程式訪問數據源以外的地方存儲的對象 用於獲取 SQL 類型分層結構元數據的添加

2.1特性

可滾動的結果集:使用 ResultSet 接口中的新方法,這些方法允許將游標移動到某一特定行,或者移動到其當前位置的某一相對位置 批量更新 編程式更新:使用 ResultSet updater 方法 新數據類型:映射 SQL3 數據類型的接口 用戶定義類型 (UDT) 的自定義映射關係 其他特性,包括性能提示、字元流的使用、java.math.BigDecimal 值的完全精度、其他安全性,以及對日期、時間和時間戳值中的時區的支持。

用途

簡單地說,JDBC 可做三件事:與資料庫建立連線、傳送 SQL 語句並處理結果。下列代碼段給出了以上三步的基本示例:
Connection con = DriverManager.getConnection("jdbc:odbc:wombat","login",
"password");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");
while (rs.next()) {
int x = rs.getInt("a");
String s = rs.getString("b");
float f = rs.getFloat("c");
}
上述代碼對基於JDBC的資料庫訪問做了經典的總結,當然,在本小節的後續部分會對它做詳盡的分析講解。

JDBCAPI

JDBC

JDBC 是個"低級"接口,也就是說,它用於直接調用 SQL 命令。在這方面它的功能極佳,並比其它的資料庫連線 API 易於使用,但它同時也被設計為一種基礎接口,在它之上可以建立高級接口和工具。高級接口是"對用戶友好的"接口,它使用的是一種更易理解和更為方便的 API,這種API在幕後被轉換為諸如 JDBC 這樣的低級接口。
在關係資料庫的"對象/關係"映射中,表中的每行對應於類的一個實例,而每列的值對應於該實例的一個屬性。於是,程式設計師可直接對 Java 對象進行操作;存取數據所需的 SQL 調用將在"掩蓋下"自動生成。此外還可提供更複雜的映射,例如將多個表中的行結合進一個 Java 類中。
隨著人們對 JDBC 的興趣日益增漲,越來越多的開發人員一直在使用基於 JDBC 的工具,以使程式的編寫更加容易。程式設計師也一直在編寫力圖使最終用戶對資料庫的訪問變得更為簡單的應用程式。例如應用程式可提供一個選擇資料庫任務的選單。任務被選定後,應用程式將給出提示及空白供填寫執行選定任務所需的信息。所需信息輸入應用程式將自動調用所需的 SQL 命令。在這樣一種程式的協助下,即使用戶根本不懂 SQL 的語法,也可以執行資料庫任務。

優缺點

JDBC與ODBC和其他API的比較,基於windows平台,Microsoft 提供了 ODBC API 用於訪問關係資料庫的編程接口。它能在幾乎所有平台上連線幾乎所有的資料庫。為什麼 Java 不使用 ODBC?對這個問題的回答是:Java 可以使用 ODBC,但最好是在 JDBC 的幫助下以 JDBC-ODBC 橋的形式使用,這一點我們稍後再說。現在的問題已變成:"為什麼需要 JDBC"?答案是顯然的:ODBC 不適合直接在 Java 中使用,因為它使用 C 語言接口。從Java 調用本地 C 代碼在安全性、實現、堅固性和程式的自動移植性方面都有許多缺點。從 ODBC C API 到 Java API 的字面翻譯是不可取的。例如,Java 沒有指針,而 ODBC 卻對指針用得很廣泛(包括很容易出錯的指針"void *")。您可以將 JDBC 想像成被轉換為面向對象接口的 ODBC,而面向對象的接口對 Java 程式設計師來說較易於接收。
ODBC 很難學。它把簡單和高級功能混在一起,而且即使對於簡單的查詢,其選項也極為複雜。相反,JDBC 儘量保證簡單功能的簡便性,而同時在必要時允許使用高級功能。啟用"純 Java "機制需要象 JDBC 這樣的 Java API。如果使用ODBC,就必須手動地將 ODBC驅動程式管理器和驅動程式安裝在每台客戶機上。如果完全用 Java 編寫 JDBC驅動程式則 JDBC 代碼在所有 Java 平台上(從網路計算機到大型機)都可以自 動安裝、移植並保證安全性。
總之,JDBC API 對於基本的 SQL 抽象和概念是一種自然的 Java 接口。它建立在 ODBC 上而不是從零開始。因此,熟悉 ODBC 的程式設計師將發現 JDBC 很容易使用。JDBC 保留了 ODBC 的基本設計特徵;事實上,兩種接口都基於 X/Open SQL CLI(調用級接口)。它們之間最大的區別在於:JDBC 以 Java 風格與優點為基礎並進行最佳化,因此更加易於使用。
Microsoft 新引進了 ODBC 之外的新 API(如:RDO、 ADO 和OLE DB等)。這些設計在許多方面與 JDBC 是相同的,即它們都是面向對象資料庫接口且基於可在 ODBC 上實現的類。但在這些接口中,我們未看見有特別的功能使我們要轉而選擇它們來替代 ODBC,尤其是在 ODBC 驅動程式已建立起較為完善的市場的情況下。它們最多也就是在 ODBC 上加了一種裝飾而已。

支持

JDBC API 既支持資料庫訪問的兩層模型(C/S),同時也支持三層模型(B/S)。在兩層模型中,Java applet或應用程式將直接與資料庫進行對話。這將需要一個JDBC驅動程式來與所訪問的特定資料庫管理系統進行通訊。用戶的SQL語句被送往資料庫中,而其結果將被送回給用戶。資料庫可以位於另一台計算機上,用戶通過網路連線到上面。這就叫做客戶機/伺服器配置,其中用戶的計算機為客戶機,提供資料庫的計算機為伺服器。網路可以是 Intranet(它可將公司職員連線起來),也可以是 Internet。
在三層模型中,命令先是被傳送到服務的"中間層",然後由它將SQL 語句傳送給資料庫。資料庫對 SQL 語句進行處理並將結果送回到中間層,中間層再將結果送回給用戶。MIS 主管們都發現三層模型很吸引人,因為可用中間層來控制對公司數據的訪問和可作的的更新的種類。中間層的另一個好處是,用戶可以利用易於使用的高級API,而中間層將把它轉換為相應的低級調用。最後,許多情況下三層結構可提供一些性能上的好處。
中間層通常都用 C 或 C++ 這類語言來編寫,這些語言執行速度較快。然而,隨著最最佳化編譯器(它把 Java位元組代碼轉換為高效的特定於機器的代碼)的引入,用 Java 來實現中間層將變得越來越實際。這將是一個很大的進步,它使人們可以充分利用 Java 的諸多優點(如堅固、多執行緒和安全等特徵)。JDBC 對於從Java的中間層來訪問資料庫非常重要。

一致性

結構化查詢語言(SQL) 是訪問關係資料庫的標準語言。困難之處在於:雖然大多數的 DBMS (資料庫管理系統)對其基本功能都使用了標準形式的 SQL,但它們卻不符合<高級功能定義>的標準 SQL 語法或語義。例如,並非所有的資料庫都支持儲存程式或外部連線,那些支持這一功能的資料庫又相互不一致。人們希望 SQL 中真正標準的那部份能夠進行擴展以包括越來越多的功能。但同時 JDBC API 又必須支持現有的 SQL。
JDBC API 解決這個問題的一種方法是允許將任何查詢字元串一直傳到所涉及的 DBMS驅動程式上。這意味著應用程式可以使用任意多的 SQL 功能,但它必須冒這樣的風險:有可能在某些 DBMS 上出錯。事實上,應用程式查詢甚至不一定要是 SQL,或者說它可以是個為特定的 DBMS 設計的 SQL 的專用派生物(例如,文檔或圖象查詢)。
JDBC 處理 SQL 一致性問題的第二種方法是提供 ODBC 風格的轉義子句,這將在後續部分中討論。轉義語法為幾個常見的 SQL 分歧提供了一種標準的 JDBC 語法。例如,對日期文字和已儲存過程的調用都有轉義語法。
對於複雜的應用程式,JDBC 用第三種方法來處理 SQL 的一致性問題它利用 DatabaseMetaData 接口來提供關於 DBMS 的描述性信息,從而使應用程式能適應每個 DBMS 的要求和功能。
由於 JDBC API 將用作開發高級資料庫訪問工具和 API 的基礎 API,因此它還必須注意其所有上層建築的一致性。"符合JDBC標準TM" 代表用戶可依賴的 JDBC 功能的標準級別。要使用這一說明,驅動程式至少必須支持 ANSI SQL-2 Entry Level(ANSI SQL-2 代表美國國家標準局 1992 年所採用的標準。Entry Level代表SQL功能的特定清單)。驅動程式開發人員可用 JDBC API 所帶的測試工具包來確定他們的驅動程式是否符合這些標準。
"符合 JDBC 標準TM" 表示提供者的 JDBC 實現已經通過了JavaSoft 提供的一致性測試。這些一致性測試將檢查 JDBC API中定義的所有類和方法是否都存在,並儘可能地檢查程式是否具有SQL Entry Level 功能。當然,這些測試並不完全。隨著越來越多的資料庫提供者、連線提供者、 Internet 提供者和應用程式編程員對 JDBC API 的接受,JDBC 也正迅速成為 Java 資料庫訪問的標準。

相關詞條

熱門詞條

聯絡我們