當前位置:首頁 » 資源管理 » jdbc是什麼資源
擴展閱讀
榮耀的小工具怎麼弄 2025-06-15 19:57:36
石油估值10元怎麼算 2025-06-15 19:56:35

jdbc是什麼資源

發布時間: 2022-06-25 04:21:38

Ⅰ 什麼是 jdbc 連接池,2個概念解釋一下啊,謝謝

JDBC=Java DataBase Connection就是指JAVA程序與資料庫的連接。
連接池指是的資料庫里為提高資源的利用和訪問速度,而設置的緩沖池。

Ⅱ 連接池是什麼 是JDBC

資料庫連接是一種關鍵的有限的昂貴的資源,這一點在多用戶的網頁應用程序中體現得尤為突出。對資料庫連接的管理能顯著影響到整個應用程序的伸縮性和健壯性,影響到程序的性能指標。資料庫連接池正是針對這個問題提出來的。資料庫連接池負責分配、管理和釋放資料庫連接,它允許應用程序重復使用一個現有的資料庫連接,而再不是重新建立一個;釋放空閑時間超過最大空閑時間的資料庫連接來避免因為沒有釋放資料庫連接而引起的資料庫連接遺漏。這項技術能明顯提高對資料庫操作的性能。
在Java中開源的資料庫連接池有以下幾種 :
1, C3P0 C3P0是一個開放源代碼的JDBC連接池,它在lib目錄中與Hibernate一起發布,包括了實現jdbc3和jdbc2擴展規范說明的Connection 和Statement 池的DataSources 對象。
2,Proxool 這是一個Java SQL Driver驅動程序,提供了對你選擇的其它類型的驅動程序的連接池封裝。可以非常簡單的移植到現存的代碼中。完全可配置。快速,成熟,健壯。可以透明地為你現存的JDBC驅動程序增加連接池功能。
3,Jakarta DBCP DBCP是一個依賴Jakarta commons-pool對象池機制的資料庫連接池.DBCP可以直接的在應用程序用使用。
4,DDConnectionBroker DDConnectionBroker是一個簡單,輕量級的資料庫連接池。
5,DBPool DBPool是一個高效的易配置的資料庫連接池。它除了支持連接池應有的功能之外,還包括了一個對象池使你能夠開發一個滿足自已需求的資料庫連接池。
6,XAPool XAPool是一個XA資料庫連接池。它實現了javax.sql.XADataSource並提供了連接池工具。
7,Primrose Primrose是一個Java開發的資料庫連接池。當前支持的容器包括Tomcat4&5,Resin3與JBoss3.它同樣也有一個獨立的版本可以在應用程序中使用而不必運行在容器中。Primrose通過一個web介面來控制SQL處理的追蹤,配置,動態池管理。在重負荷的情況下可進行連接請求隊列處理。
8,SmartPool SmartPool是一個連接池組件,它模仿應用伺服器對象池的特性。SmartPool能夠解決一些臨界問題如連接泄漏(connection leaks),連接阻塞,打開的JDBC對象如Statements,PreparedStatements等. SmartPool的特性包括支持多個pools,自動關閉相關聯的JDBC對象, 在所設定time-outs之後察覺連接泄漏,追蹤連接使用情況, 強制啟用最近最少用到的連接,把SmartPool"包裝"成現存的一個pool等。
9,MiniConnectionPoolManager MiniConnectionPoolManager是一個輕量級JDBC資料庫連接池。它只需要Java1.5(或更高)並且沒有依賴第三方包。
10,BoneCP BoneCP是一個快速,開源的資料庫連接池。幫你管理數據連接讓你的應用程序能更快速地訪問資料庫。比C3P0/DBCP連接池快25倍。

Ⅲ 關於JDBC的問題

jdbc編程步驟:
1、 載入資料庫驅動

2、 創建並獲取資料庫鏈接

3、 創建jdbc statement對象

4、 設置sql語句

5、 設置sql語句中的參數(使用preparedStatement)

6、 通過statement執行sql並獲取結果

7、 對sql執行結果進行解析處理

8、 釋放資源(resultSet、preparedstatement、connection)

2, jdbc問題總結如下:
1、 資料庫連接創建、釋放頻繁造成系統資源浪費,從而影響系統性能。如果使用資料庫連接池可解決此問題。

2、 Sql語句在代碼中硬編碼,造成代碼不易維護,實際應用中sql變化的可能較大,sql變動需要改變java代碼。

3、 使用preparedStatement向佔有位符號傳參數存在硬編碼,因為sql語句的where條件不一定,可能多也可能少,修改sql還要修改代碼,系統不易維護。

4、 對結果集解析存在硬編碼(查詢列名),sql變化導致解析代碼變化,系統不易維護,如果能將資料庫記錄封裝成pojo對象解析比較方便。

Ⅳ 有關JDBC中PreparedStatement的問題

1.你創建了100個PS的實例,但是你只關閉了最後一個。1樓說的GC會回收另外99個,沒錯,但GC能自動回收的只是JAVA創建的資源。
preparedstatement為jdbc得api,他還會創建跟具體資料庫有關的其他資源。close方法就是用來施放那些資源的。如果你沒有每個都close,會導致內存泄漏。

2.不可以。

------------
補充:當然有非java創建的資源 jdbc可以說是一個和資料庫通信的驅動。你建立jdbc的對象,調用它的方法。jdbc會去調用你使用的資料庫的api,實現對資料庫的操作。那些資料庫的api會創建很多資源。java的gc(垃圾回收器)只會釋放掉那些java對象所佔的內存。無法釋放資料庫api創建的資源。只有通過jdbc相關的close方法才能釋放。
你只要記住,所有有close方法的jdbc對象在使用完成後都需要手動釋放。
另外,就是內存泄漏,相應的資源在內存中沒有被引用,而又沒有被操作系統回收。

對,就是這個意思,除了JDBC還有很多根操作系統api有關的java api都有close方法,他們都是用來釋放相應的非java資源的。

Ⅳ 關於JDBC

1.如果要自己控制事務
首先要把自動提交設成false
con.setAutoCommit(false);
提交
con.commit();
回滾
con.rollback();
2. stmt.executeUpdate(sql);
3. stmt.executeQuery(sql);
2和3也可以用execute(sql) //返回true,表示查詢;false,表示其它操作
4. 關閉資料庫連接(釋放資源)調用.close();
ResultSet Statement Connection是依次依賴的。

Ⅵ 使用JDBC和DataSource的區別

JDBC -最基本的連接資料庫的方式, 每次對資料庫打交道的時候 ,連接資料庫是需要實例下你實現連接資料庫的方法或者類。
JNDI DataSource 英文全稱是:Java Naming and Directory Interface java 命明介面,當服務啟動時 事先把連接資料庫的已經連好多條,具體多少條你可以設置,存放在tomcat容器里,用的時候可以直接使用, 不用再實例化得到連接, 相對與jdbc效率要快點 ----我的通俗理解

JNDI與JDBC:
JNDI提供了一種統一的方式,可以用在網路上查找和訪問服務。通過指定一個資源名稱,該名稱對應於資料庫或命名服務中的一個紀錄,同時返回資料庫連接建立所必須的信息。
代碼示例:
try{
Context cntxt = new InitialContext();
DataSource ds = (DataSource) cntxt.lookup("jdbc/dpt");
}
catch(NamingException ne){
...
}

/**補充*/
還有用odbc 數據源連接 資料庫
連接資料庫的方法還不止這幾種

主要看你們公司的項目的需求與框架設計
如果你在一個比較成熟的公司,這些你都不用去管,連接資料庫這些底層的東西別人早就搭好平台。你只是需要問「如何調用」就ok了
jdbc 是最基本的連接
JNDI 一般是hibernate中使用比較多

DataSource里能配置很多東西,如最大連接數等

Ⅶ 使用JDBC和DataSource的區別

JDBC
-最基本的連接資料庫的方式,
每次對資料庫打交道的時候
,連接資料庫是需要實例下你實現連接資料庫的方法或者類。
JNDI
DataSource
英文全稱是:Java
Naming
and
Directory
Interface
java
命明介面,當服務啟動時
事先把連接資料庫的已經連好多條,具體多少條你可以設置,存放在tomcat容器里,用的時候可以直接使用,
不用再實例化得到連接,
相對與jdbc效率要快點
----我的通俗理解
JNDI與JDBC:
JNDI提供了一種統一的方式,可以用在網路上查找和訪問服務。通過指定一個資源名稱,該名稱對應於資料庫或命名服務中的一個紀錄,同時返回資料庫連接建立所必須的信息。
代碼示例:
try{
Context
cntxt
=
new
InitialContext();
DataSource
ds
=
(DataSource)
cntxt.lookup("jdbc/dpt");
}
catch(NamingException
ne){
...
}
/**補充*/
還有用odbc
數據源連接
資料庫
連接資料庫的方法還不止這幾種
主要看你們公司的項目的需求與框架設計
如果你在一個比較成熟的公司,這些你都不用去管,連接資料庫這些底層的東西別人早就搭好平台。你只是需要問「如何調用」就ok了
jdbc
是最基本的連接
JNDI
一般是hibernate中使用比較多
DataSource里能配置很多東西,如最大連接數等

Ⅷ JDBC是怎麼和資料庫建立連接的

創建一個以JDBC連接資料庫的程序,包含7個步驟:
1、載入JDBC驅動程序:
在連接資料庫之前,首先要載入想要連接的資料庫的驅動到JVM(Java虛擬機),
這通過java.lang.Class類的靜態方法forName(String className)實現。
例如:
try{
//載入MySql的驅動類
Class.forName("com.mysql.jdbc.Driver") ;
}catch(ClassNotFoundException e){
System.out.println("找不到驅動程序類 ,載入驅動失敗!");
e.printStackTrace() ;
}
成功載入後,會將Driver類的實例注冊到DriverManager類中。
2、提供JDBC連接的URL
•連接URL定義了連接資料庫時的協議、子協議、數據源標識。
•書寫形式:協議:子協議:數據源標識
協議:在JDBC中總是以jdbc開始
子協議:是橋連接的驅動程序或是資料庫管理系統名稱。
數據源標識:標記找到資料庫來源的地址與連接埠。
例如:(MySql的連接URL)
jdbc:mysql:
//localhost:3306/test?useUnicode=true&characterEncoding=gbk ;
useUnicode=true:表示使用Unicode字元集。如果characterEncoding設置為
gb2312或GBK,本參數必須設置為true 。characterEncoding=gbk:字元編碼方式。
3、創建資料庫的連接
•要連接資料庫,需要向java.sql.DriverManager請求並獲得Connection對象,
該對象就代表一個資料庫的連接。
•使用DriverManager的getConnectin(String url , String username ,
String password )方法傳入指定的欲連接的資料庫的路徑、資料庫的用戶名和
密碼來獲得。
例如:
//連接MySql資料庫,用戶名和密碼都是root
String url = "jdbc:mysql://localhost:3306/test" ;
String username = "root" ;
String password = "root" ;
try{
Connection con =
DriverManager.getConnection(url , username , password ) ;
}catch(SQLException se){
System.out.println("資料庫連接失敗!");
se.printStackTrace() ;
}
4、創建一個Statement
•要執行SQL語句,必須獲得java.sql.Statement實例,Statement實例分為以下3
種類型:
1、執行靜態SQL語句。通常通過Statement實例實現。
2、執行動態SQL語句。通常通過PreparedStatement實例實現。
3、執行資料庫存儲過程。通常通過CallableStatement實例實現。
具體的實現方式:
Statement stmt = con.createStatement() ;
PreparedStatement pstmt = con.prepareStatement(sql) ;
CallableStatement cstmt =
con.prepareCall("{CALL demoSp(? , ?)}") ;
5、執行SQL語句
Statement介面提供了三種執行SQL語句的方法:executeQuery 、executeUpdate
和execute
1、ResultSet executeQuery(String sqlString):執行查詢資料庫的SQL語句
,返回一個結果集(ResultSet)對象。
2、int executeUpdate(String sqlString):用於執行INSERT、UPDATE或
DELETE語句以及SQL DDL語句,如:CREATE TABLE和DROP TABLE等
3、execute(sqlString):用於執行返回多個結果集、多個更新計數或二者組合的
語句。
具體實現的代碼:
ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;
int rows = stmt.executeUpdate("INSERT INTO ...") ;
boolean flag = stmt.execute(String sql) ;
6、處理結果
兩種情況:
1、執行更新返回的是本次操作影響到的記錄數。
2、執行查詢返回的結果是一個ResultSet對象。
• ResultSet包含符合SQL語句中條件的所有行,並且它通過一套get方法提供了對這些
行中數據的訪問。
• 使用結果集(ResultSet)對象的訪問方法獲取數據:
while(rs.next()){
String name = rs.getString("name") ;
String pass = rs.getString(1) ; // 此方法比較高效
}
(列是從左到右編號的,並且從列1開始)
7、關閉JDBC對象
操作完成以後要把所有使用的JDBC對象全都關閉,以釋放JDBC資源,關閉順序和聲
明順序相反:
1、關閉記錄集
2、關閉聲明
3、關閉連接對象
if(rs != null){ // 關閉記錄集
try{
rs.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(stmt != null){ // 關閉聲明
try{
stmt.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(conn != null){ // 關閉連接對象
try{
conn.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}

Ⅸ JDBC Driver與JNDI DataSource有什麼區別

JDBC Driver與JNDI DataSource的區別如下:
jdbc是資料庫中間代理商為了是java連接資料庫而定的一個協議或者說是方法,通過jdbc-odbc的方法進行資料庫連接,是連接一次創建一次的做法
1、由資料庫驅動和協議組成連接數據的方法,調用中間商提供的類包,進行創建連接
2、再由連接去調用3種狀態.
3、由狀態來提供對資料庫的操作

jndi是一種命名樹的方式,把需要的類都列成目錄的樣式,需要哪個只要根據命名直接去 調用,是一種比較快潔的思想和行為. 當你要操作資料庫的用jdbc 操作命名服務用jndi Java Database Connectivity (JDBC)是一個標準的Java API,它由一組類和介面組成,Java應用程序開發人員使用它來訪問資料庫和執行SQL語句 JNDI(Java Name Directory Interface),可不僅僅是進行資料庫定位的, 它是給當前應用伺服器所管理的所有資源一個唯一的標識,包括資料庫,網頁,文件, 連接池等等。

Ⅹ jdbc是什麼,和PL/SQL developer是什麼關系

定義
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 可為外部客戶提供獲取信息更新的更好方法。
[編輯本段]用途
簡單地說,JDBC 可做三件事:與資料庫建立連接、發送 操作資料庫的語句並處理結果。下列代碼段給出了以上三步的基本示例: 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的資料庫訪問做了經典的總結,當然,在本小節的後續部分會對它做詳盡的分析講解。
[編輯本段]API
JDBC 是個"低級"介面,也就是說,它用於直接調用 SQL 命令。在這方面它的功能極佳,並比其它的資料庫連接 API 易於使用,但它同時也被設計為一種基礎介面,在它之上可以建立高級介面和工具。高級介面是"對用戶友好的"介面,它使用的是一種更易理解和更為方便的 API,這種API在幕後被轉換為諸如 JDBC 這樣的低級介面。 在關系資料庫的"對象/關系"映射中,表中的每行對應於類的一個實例,而每列的值對應於該實例的一個屬性。於是,程序員可直接對 Java 對象進行操作;存取數據所需的 SQL 調用將在"掩蓋下"自動生成。此外還可提供更復雜的映射,例如將多個表中的行結合進一個 Java 類中。 隨著人們對 JDBC 的興趣日益增漲,越來越多的開發人員一直在使用基於 JDBC 的工具,以使程序的編寫更加容易。程序員也一直在編寫力圖使最終用戶對資料庫的訪問變得更為簡單的應用程序。例如應用程序可提供一個選擇資料庫任務的菜單。任務被選定後,應用程序將給出提示及空白供填寫執行選定任務所需的信息。所需信息輸入應用程序將自動調用所需的 SQL 命令。在這樣一種程序的協助下,即使用戶根本不懂 SQL 的語法,也可以執行資料庫任務。
[編輯本段]與ODBC和其它API的比較
目前,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 上加了一種裝飾而已。
[編輯本段]對B/S和C/S模式的支持
JDBC API 既支持資料庫訪問的兩層模型(C/S),同時也支持三層模型(B/S)。在兩層模型中,Java applet或應用程序將直接與資料庫進行對話。這將需要一個JDBC驅動程序來與所訪問的特定資料庫管理系統進行 通訊。用戶的SQL語句被送往資料庫中,而其結果將被送回給用戶。資料庫可以位於另一台計算機上,用戶通過網路連接到上面。這就叫做客戶機/伺服器配置,其中用戶的計算機為客戶機,提供資料庫的計算機為伺服器。網路可以是 Intranet(它可將公司職員連接起來),也可以是 Internet。 在三層模型中,命令先是被發送到服務的"中間層",然後由它將SQL 語句發送給資料庫。資料庫對 SQL 語句進行處理並將結果送回到中間層,中間層再將結果送回給用戶。MIS 主管們都發現三層模型很吸引人,因為可用中間層來控制對公司數據的訪問和可作的的更新的種類。中間層的另一個好處是,用戶可以利用易於使用的高級API,而中間層將把它轉換為相應的低級調用。最後,許多情況下三層結構可提供一些性能上的好處。 到目前為止,中間層通常都用 C 或 C++ 這類語言來編寫,這些語言執行速度較快。然而,隨著最優化編譯器(它把 Java 位元組代碼轉換為高效的特定於機器的代碼)的引入,用 Java 來實現中間層將變得越來越實際。這將是一個很大的進步,它使人們可以充分利用 Java 的諸多優點(如堅固、多線程和安全等特徵)。JDBC 對於從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 功能。當然,這些測試並不完全,而且 JavaSoft 目前也無意對各提供者的實現進行標級。但這種一致性定義的確可對JDBC實現提供一定的可信度。隨著越來越多的資料庫提供者、連接提供者、Internet 提供者和應用程序編程員對 JDBC API 的接受,JDBC 也正迅速成為 Java 資料庫訪問的標准。
[編輯本段]入門-建立聯接
裝載驅動程序
你需要做的第一事情是你與想要使用的 DBMS 建立一個連接。這包含 2 個步驟:裝載驅動程序並建立連接。 裝載驅動程序只需要非常簡單的一行代碼。例如,你想要使用 JDBC-ODBC 橋驅動程序, 可以用下列代碼裝載它: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 你的驅動程序文檔將告訴你應該使用的類名。例如, 如果類名是 jdbc.DriverXYZ ,你將用代碼以下的代碼裝載驅動程序: Class.forName("jdbc.DriverXYZ"); 你不需要創建一個驅動程序類的實例並且用 DriverManager 登記它,因為調用 Class.forName 將自動將載入驅動程序類。如果你曾自己創建實例,你將創建一個不必要的副本,但它不會帶來什麼壞處。 載入 Driver 類後,它們即可用來與資料庫建立連接。
建立連接
第二步就是用適當的驅動程序類與 DBMS 建立一個連接。下列代碼是一般的做法: Connection con = DriverManager.getConnection(url, "myLogin", "myPassword"); 這個步驟也非常簡單,最難的是怎麼提供 url。如果你正在使用 JDBC-ODBC 橋, JDBC URL 將以 jdbc:odbc 開始:餘下 URL 通常是你的數據源名字或資料庫系統。因此,假設你正在使用 ODBC 存取一個叫 "Fred" 的 ODBC 數據源,你的 JDBC URL 是 jdbc:odbc:Fred 。把 "myLogin" 及 "myPassword" 替換為你登陸 DBMS 的用戶名及口令。如果你登陸資料庫系統的用戶名為 "Fernanda" 口令為 "J8",只需下面的 2 行代碼就可以建立一個連接: String url = "jdbc:odbc:Fred"; Connection con = DriverManager.getConnection(url,"Fernanda", "J8"); 如果你使用的是第三方開發了的 JDBC驅動程序,文檔將告訴你該使用什麼 subprotocol, 就是在 JDBC URL 中放在 jdbc 後面的部分。例如, 如果驅動程序開發者注冊了 acme 作為 subprotocol, JDBC URL 的第一和第二部分將是 jdbc:acme。驅動程序文檔也會告訴你餘下 JDBC URL 的格式。JDBC URL 最後一部分提供了定位資料庫的信息。 如果你裝載的驅動程序識別了提供給 DriverManager.getConnection 的 JDBC URL ,那個驅動程序將根據 JDBC URL 建立一個到指定 DBMS 的連接。正如名稱所示,DriverManager 類在幕後為你管理建立連接的所有細節。除非你是正在寫驅動程序,你可能無需使用此類的其它任何方法,一般程序員需要在此類中直接使用的唯一方法是 DriverManager.getConnection。 DriverManager.getConnection 方法返回一個打開的連接,你可以使用此連接創建 JDBC statements 並發送 SQL 語句到資料庫。在前面的例子里,con 對象是一個打開的連接,並且我們要在以後的例子里使用它。
[編輯本段]入門-設置表
創建表
首先,我們在我們的示例資料庫創建其中一張表 COFFEES,包含在咖啡店所賣咖啡的必要的信息,包括咖啡名字,他們的價格,本星期賣了多少磅及迄今為止賣的數目。關於 COFFEES 表我們以後會詳細描述,如下: 我們寫了創建 COFFEES 表的 SQL 語句。現在我們在它外面加上引號(使它成為字元串),並且字元串賦值給變數 createTableCoffees,在以後的 JDBC 代碼中我們可以使用此變數。正如看到的,DBMS 並不在意分行,但對 Java 語言來,String 對象分行是通不過編譯的。因而,我們可以用加號 (+) 把每一行的串連接。 String createTableCoffees = "CREATE TABLE COFFEES " + "(COF_NAME VARCHAR(32), SUP_ID INTEGER, PRICE FLOAT, " + "SALES INTEGER, TOTAL INTEGER)"; 我們在 CREATE TABLE 語句中使用的數據類型是通用的 SQL 類型(也稱 JDBC 類型)它們在類 java.sql.Types 中定義。DBMSs 通常使用這些標準的類型,因此,當你要嘗試一些 JDBC 應用程序時,你可以直接使用 CreateCoffees.java 應用程序,它使用了 CREATE TABLE 語句。如果你的 DBMS 使用了它的自己的本地的類型名字,我們為你供應其它的應用程序,我們將在後面詳細解釋。 在運用任何應用程序前,當然,我們將讓你了解 JDBC 的基礎。
創建對象
Statement 對象用於把 SQL 語句發送到 DBMS 。你只須簡單地創建一個 Statement 對象並且然後執行它,使用適當的方法執行你發送的 SQL 語句。對 SELECT 語句來說,可以使用 executeQuery。要創建或修改表的語句,使用的方法是 executeUpdate。 需要一個活躍的連接的來創建 Statement 對象的實例。在下面的例子中,我們使用我們的 Connection 對象 con 創建 Statement 對象 stmt: Statement stmt = con.createStatement(); 到此 stmt 已經存在了,但它還沒有把 SQL 語句傳遞到 DBMS。我們需要提供 SQL 語句作為參數提供給我們使用的 Statement 的方法。例如,在下面的代碼段里,我們使用上面例子中的 SQL 語句作為 executeUpdate 的參數: stmt.executeUpdate("CREATE TABLE COFFEES " + "(COF_NAME VARCHAR(32), SUP_ID INTEGER, PRICE FLOAT, " + "SALES INTEGER, TOTAL INTEGER)"); 因為我們已經把 SQL 語句賦給了 createTableCoffees 變數,我們可以如下方式書寫代碼: stmt.executeUpdate(createTableCoffees);
執行語句
我們使用 executeUpdate 方法是因為在 createTableCoffees 中的 SQL 語句是 DDL (數據定義語言)語句。創建表,改變表,刪除表都是 DDL 語句的例子,要用 executeUpdate 方法來執行。你也可以從它的名字里看出,方法 executeUpdate 也被用於執行更新表 SQL 語句。實際上,相對於創建表來說,executeUpdate 用於更新表的時間更多,因為表只需要創建一次,但經常被更新。 被使用最多的執行 SQL 語句的方法是 executeQuery。這個方法被用來執行 SELECT 語句,它幾乎是使用最多的 SQL 語句。馬上你將看到如何使用這個方法。
在表中輸入數據
我們已經顯示了如何通過指定列名、數據類型來創建表 COFFEES,但是這僅僅建立表的結構。表還沒有任何數據。我們將次輸入一行數據到表中,提供每列的信息,注意插入的數據顯示順序跟表創建時候是一樣的,既預設順序。 下列代碼插入一個行數據,COF_NAME 的值為 Colombian,SUP_ID 為 101,PRICE 為 7.99,SALES 0,TOTAL 0。就象創建 COFFEES 表一樣,我們創建一 Statement 對象,並執行 executeUpdate 方法。 因為 SQL 語句一行顯示不下,因此我們把它分為兩行,並用加號 (+) 相連。特別要注意的是,在 COFFEES 和 VALUES 之間要有空格。這個空格必須在引號之內並且要在 COFFEES 跟 VALUES 之間;沒有這個空格,SQL 語句將被錯誤地被讀作為 "INSERT INTO COFFEESVALUES ...",並且 DBMS 將尋找表 COFFEESVALUES。還要注意的是在 coffee name 上我們使用了單引號。 Statement stmt = con.createStatement(); stmt.executeUpdate( "INSERT INTO COFFEES " + "VALUES ('Colombian', 101, 7.99, 0, 0)"); 下面的代碼把第二行插入到表 COFFEES 中。我們可以在使用 Statement 對象而無須為每次執行創建一個新的。 stmt.executeUpdate("INSERT INTO COFFEES " + "VALUES ('French_Roast', 49, 8.99, 0, 0)"); 剩下行的數據如下: stmt.executeUpdate("INSERT INTO COFFEES " + "VALUES ('Espresso', 150, 9.99, 0, 0)"); stmt.executeUpdate("INSERT INTO COFFEES " + "VALUES ('Colombian_Decaf', 101, 8.99, 0, 0)"); stmt.executeUpdate("INSERT INTO COFFEES " + "VALUES ('French_Roast_Decaf', 49, 9.99, 0, 0)");
從表中取得數據
既然表 COFFEES 中已經有數據了,我們就可以寫一個 SELECT 語句來取得這些值。下面的 SQL 語句中星號 (*) 表示選擇所有的列。因為沒有用 WHERE 子句來限制所選的行,因此下面的 SQL 語句選擇的是整個表。 SELECT * FROM COFFEES 結果是整個表的數據,如下: COF_NAME SUP_ID PRICE SALES TOTAL --------------- ------ ----- ----- ----- Colombian 101 7.99 0 0 French_Roast 49 8.99 0 0 Espresso 150 9.99 0 0 Colombian_Decaf 101 8.99 0 0 French_Roast_Decaf 49 9.99 0 0 如果你直接在資料庫系統里輸入 SQL 查詢語句,你將在你的終端上看到如上的結果。當我們通過一個 Java 應用程序存取一個資料庫時,正如我們馬上要做的一樣,我們需要檢索結果以便我們能使用他們。你將在下一節看到如何實現。 這是 SELECT 語句的另一個例子,這將得到咖啡及其各自每磅單價的列表。 SELECT COF_NAME, PRICE FROM COFFEES 查詢的結果集將具有如下形式: COF_NAME PRICE -------- ---------- ----- Colombian 7.99 French_Roast 8.99 Espresso 9.99 Colombian_Decaf 8.99 French_Roast_Decaf 9.99 上面 SELECT 語句取得了所有咖啡的名字及價格。而下面的 SELECT 語句限制那些每磅價格低於 .00 的咖啡才被選擇。 SELECT COF_NAME, PRICE FROM COFFEES WHERE PRICE < 9.00 結果集將具有如下形式: COF_NAME PRICE -------- ------- ----- Colombian 7.99 French_Roast 8.99 Colombian Decaf 8.99
[編輯本段]建立JDBC連接
綜述
Connection 對象代表與資料庫的連接。連接過程包括所執行的 SQL 語句和在該連接上所返回的結果。一個應用程序可與單個資料庫有一個或多個連接,或者可與許多資料庫有連接。
打開連接
與資料庫建立連接的標准方法是調用DriverManager.getConnection方法。該方法接受含有某個URL的字元串。DriverManager類(即所謂的JDBC管理層)將嘗試找到可與那個URL所代表的資料庫進行連接的驅動程序。DriverManager類存有已注冊的Driver類的清單。當調用方法getConnection時,它將檢查清單中的每個驅動程序,直到找到可與URL中指定的資料庫進行連接的驅動程序為止。Driver的方法connect使用這個URL來建立實際的連接。 用戶可繞過JDBC管理層直接調用Driver方法。這在以下特殊情況下將很有用:當兩個驅動器可同時連接到資料庫中,而用戶需要明確地選用其中特定的驅動器。但一般情況下,讓DriverManager類處理打開連接這種事將更為簡單。 下述代碼顯示如何打開一個與位於URL"jdbc:odbc:wombat"的資料庫的連接。所用的用戶標識符為"freely",口令為"ec": String url = "jdbc:odbc:wombat"; Connection con = DriverManager.getConnection(url, "freely", "ec");
一般用法的URL
由於URL常引起混淆,我們將先對一般URL作簡單說明,然後再討論JDBCURL。URL(統一資源定位符)提供在Internet上定位資源所需的信息。可將它想像為一個地址。URL的第一部份指定了訪問信息所用的協議,後面總是跟著冒號。常用的協議有"ftp"(代表"文件傳輸協議")和"http"(代表"超文本傳輸協議")。如果協議是"file",表示資源是在某個本地文件系統上而非在Internet上(下例用於表示我們所描述的部分;它並非URL的組成部分)。 URL的其餘部份(冒號後面的)給出了數據資源所處位置的有關信息。如果協議是file,則URL的其餘部份是文件的路徑。對於ftp和http協議,URL的其餘部份標識了主機並可選地給出某個更詳盡的地址路徑。例如,以下是JavaSoft主頁的URL。該URL只標識了主機,從該主頁開始瀏覽,就可以進到許多其它的網頁中,其中之一就是JDBC主頁。
JDBC URL
JDBC URL提供了一種標識資料庫的方法,可以使相應的驅動程序能識別該資料庫並與之建立連接。實際上,驅動程序編程員將決定用什麼JDBC URL來標識特定的驅動程序。用戶不必關心如何來形成JDBC URL;他們只須使用與所用的驅動程序一起提供的URL即可。JDBC的作用是提供某些約定,驅動程序編程員在構造他們的JDBC URL時應該遵循這些約定。 由於JDBC URL要與各種不同的驅動程序一起使用,因此這些約定應非常靈活。首先,它們應允許不同的驅動程序使用不同的方案來命名資料庫。例如,odbc子協議允許(但並不是要求)URL含有屬性值。 其次,JDBC URL應允許驅動程序編程員將一切所需的信息編入其中。這樣就可以讓要與給定資料庫對話的applet打開資料庫連接,而無須要求用戶去做任何系統管理工作。 最後,JDBC URL應允許某種程度的間接性。也就是說,JDBC URL可指向邏輯主機或資料庫名,而這種邏輯主機或資料庫名將由網路命名系統動態地轉換為實際的名稱。這可以使系統管理員不必將特定主機聲明為JDBC名稱的一部份。網路命名服務(例如DNS、NIS和DCE)有多種,而對於使用哪種命名服務並無限制。 JDBC URL的標准語法如下所示。它由三部分組成,各部分間用冒號分隔。 JDBC URL的三個部分可分解如下: (1)jdbc協議:JDBC URL中的協議總是jdbc。 (2)<子協議>:驅動程序名或資料庫連接機制(這種機制可由一個或多個驅動程序支持)的名稱。子協議名的典型示例是"odbc",該名稱是為用於指定ODBC風格的數據資源名稱的URL專門保留的。例如,為了通過JDBC-ODBC橋來訪問某個資料庫,可以用如下所示的URL:jdbc:odbc:book。本例中,子協議為"odbc",子名稱"book"是本地ODBC數據資源。如果要用網路命名服務(這樣JDBC URL中的資料庫名稱不必是實際名稱),則命名服務可以作為子協議。例如,可用如下所示的URL:jdbc:dcenaming:accounts。本例中,該URL指定了本地DCE命名服務應該將資料庫名稱"accounts"解析為更為具體的可用於連接真實資料庫的名稱。 (3)<子名稱>:種標識資料庫的方法。子名稱可以依不同的子協議而變化。它還可以有子名稱的子名稱(含有驅動程序編程員所選的任何內部語法)。使用子名稱的目的是為定位資料庫提供足夠的信息。前例中,因為ODBC將提供其餘部份的信息,因此用"book"就已足夠。然而,位於遠程伺服器上的資料庫需要更多的信息。例如,如果資料庫是通過Internet來訪問的,則在JDBC URL中應將網路地址作為子名稱的一部份包括進去,且必須遵循如下所示的標准URL命名約定://主機名:埠/子協議。 假設"dbnet"是個用於將某個主機連接到Internet上的協議,則JDBC URL應為:jdbc:dbnet://wombat:356/fred。

參考http://ke..com/view/25611.htm?fr=ala0_1