複製鏈接
請複製以下鏈接發送給好友

java.sql

鎖定
提供使用 JavaTM 編程語言訪問並處理存儲在數據源(通常是一個關係數據庫)中的數據的 API。此 API 包括一個框架,憑藉此框架可以動態地安裝不同驅動程序來訪問不同數據源。
中文名
java.sql
性    質
API
分    類
SQL 類型
所屬學科
計算機學

java.sql描述

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

java.sqlsql包內容

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:為了指示並不是批量更新中的所有命令都成功執行而拋出

java.sqlJDBC內容

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) 技術的重要部分。

java.sqlJDBC特性

java.sql4.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 已關閉或驅動程序確定為無效時要通知的可用性

java.sql3.0特性

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

java.sql2.1特性

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

java.sql用途

簡單地説,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的數據庫訪問做了經典的總結,當然,在本小節的後續部分會對它做詳盡的分析講解。

java.sqlJDBCAPI

java.sqlJDBC

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

java.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 上加了一種裝飾而已。

java.sql支持

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

java.sql一致性

結構化查詢語言(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 數據庫訪問的標準。