童少娟
[摘 要]Java數(shù)據(jù)庫連接(JDBC)由一組用 Java編程語言編寫的類和接口組成。JDBC為工具/數(shù)據(jù)庫開發(fā)人員提供了一個(gè)標(biāo)準(zhǔn)的 API,使他們能夠用純Java API來編寫數(shù)據(jù)庫應(yīng)用程序,本文介紹了JDBC的概念、功能、特點(diǎn)及JDBC連接幾種數(shù)據(jù)庫的方式。
[關(guān)鍵詞]JDBC Java 數(shù)據(jù)庫 連接
JDBC是執(zhí)行SQL語句的Java API。使用JDBC可以很容易地把SQL語句傳送到任何關(guān)系型數(shù)據(jù)庫中。換言之,用戶不必為訪問Sybase數(shù)據(jù)庫寫一個(gè)程序,又為訪問Oracle數(shù)據(jù)庫寫另一個(gè)程序。可以用JDBC API寫出唯一的程序,它能夠?qū)QL語句發(fā)送到相應(yīng)的任何一種數(shù)據(jù)庫。Java與JDBC的結(jié)合,使程序員可以只寫一次數(shù)據(jù)庫應(yīng)用軟件后,就能在各種數(shù)據(jù)庫系統(tǒng)上運(yùn)行。由于Java語言具有健壯性、安全、易使用、易理解和自動(dòng)下載到網(wǎng)絡(luò)等優(yōu)點(diǎn),因此,它是數(shù)據(jù)庫應(yīng)用的一個(gè)極好的基礎(chǔ)語言?,F(xiàn)在,需要找到一種能使Java應(yīng)用與各種不同數(shù)據(jù)庫對(duì)話的方式,而JDBC正是實(shí)現(xiàn)這種對(duì)話的一種機(jī)制。
一、JDBC的功能與特點(diǎn)
1.JDBC的基本功能
(1)建立與數(shù)據(jù)庫的連接;(2)發(fā)送SQL語句;(3)處理結(jié)果。
2.JDBC是低級(jí)的API與高級(jí)API的基礎(chǔ)
JDBC是一種“低級(jí)”的接口,因?yàn)樗苯诱{(diào)用SQL命令,但它又可以作為構(gòu)造高級(jí)接口與工具的基礎(chǔ)。高級(jí)接口是“用戶友善的”、更易理解和更為方便的API,由后臺(tái)將它翻譯成如JDBC這樣的低級(jí)接口。有兩種基于JDBC的高級(jí)API正處在開發(fā)之中:一種是嵌入SQL的Java。JDBC要求把SQL語句作為字符串傳遞給Java方法。嵌入SQL預(yù)處理程序,可讓程序員把SQL與Java直接混合使用。另一種是把關(guān)系數(shù)據(jù)庫表直接映射成Java類。在“對(duì)象/關(guān)系”的映射中,表中的每一行變成類的一個(gè)實(shí)例,每一列的值對(duì)應(yīng)于該實(shí)例的一個(gè)屬性。然后,程序員可直接操作Java對(duì)象,并自動(dòng)生成取、存數(shù)據(jù)的SQL調(diào)用。另外,它還提供了更高級(jí)的映射,例如,在Java類中把多個(gè)表的行結(jié)合起來。
3.JDBC與ODBC及其它API的比較
目前,Microsoft的ODBC API是訪問關(guān)系型數(shù)據(jù)庫中應(yīng)用最廣的編程接口,它幾乎能將所有平臺(tái)的所有數(shù)據(jù)庫連接起來?,F(xiàn)在的問題是可否通過Java來使用ODBC呢?回答是肯定的,但最好的做法是在JDBC幫助下采用JDBC-ODBC橋接方式實(shí)現(xiàn)。需要JDBC的理由如下:
(1)Java不能直接使用ODBC。因?yàn)镺DBC使用C語言接口,如果讓Java來調(diào)用本機(jī)C代碼的話,那會(huì)在安全、屬性、健壯性、應(yīng)用的可移植性等方面帶來困難。
(2)不希望把ODBC C API逐字地翻譯成Java API。例如,ODBC使用了大量的易于出錯(cuò)的指針,而Java取消了這種不安全的指針?,F(xiàn)在通過JDBC,把ODBC翻譯成具有Java風(fēng)格的面向?qū)ο蟮慕涌凇?/p>
(3)JDBC的Java API提供“純Java”的解決辦法。當(dāng)使用ODBC時(shí),ODBC驅(qū)動(dòng)器管理程序與驅(qū)動(dòng)器必須手工地裝入到每架客戶機(jī)上。而JDBC驅(qū)動(dòng)器全部是用Java編寫的,JDBC代碼則在所有Java平臺(tái)(從網(wǎng)絡(luò)計(jì)算機(jī)到主機(jī))上都可自動(dòng)安裝,并且是可移植的和安全的。
總之,JDBC API是一種基于SQL的抽象與概念的Java接口,它是基于ODBC的。熟悉ODBC的程序員很容易學(xué)習(xí)JDBC,JDBC保留了ODBC的基本設(shè)計(jì)功能。而且兩種接口都是基于X/OpenSQL CLI(Call Level Interface)。最大的區(qū)別是JDBC保持了Java自身的風(fēng)格與優(yōu)點(diǎn)。最近,Microsoft引入了ODBC以外的新的API,包括RDO、ADO和OLE DB。其設(shè)計(jì)策略在許多方面與JDBC類似,也是一種基于ODBC類的面向?qū)ο蟮臄?shù)據(jù)庫接口。
4.保證一致性的措施
結(jié)構(gòu)化查詢語言(SQL)是存取關(guān)系型數(shù)據(jù)庫的標(biāo)準(zhǔn)語言。盡管多數(shù)DBMS系統(tǒng)在基本功能上都采用SQL的標(biāo)準(zhǔn)形式,但在高級(jí)功能上它們并不遵循最新定義的標(biāo)準(zhǔn)SQL語法、語義。例如,不是所有的數(shù)據(jù)庫都支持存儲(chǔ)過程或外部連接,這樣就產(chǎn)生了不一致。JDBC API處理這個(gè)問題的方法是允許將任何查詢字符串傳遞給基礎(chǔ)DBMS驅(qū)動(dòng)器。JDBC處理SQL一致性問題的第二種方法是采用ODBC風(fēng)格的例外條款,它提供了表示幾種常見的SQL差別的標(biāo)準(zhǔn)JDBC語法。例如,有表示日期文字與存儲(chǔ)過程定義的例外條款。
二、JDBC連接幾種數(shù)據(jù)庫的方式
1.Oracle8/8i/9i數(shù)據(jù)庫(thin模式) Class.forName(“oracle.jdbc.driver.OracleDriver”).newInstance();
String url=“jdbc:oracle:thin:@localhost:1521:orcl”;//orcl為數(shù)據(jù)庫的SID
String user=“test”;
String password=“test”;
Connection conn= DriverManager.getConnection(url,user,password);
2.DB2數(shù)據(jù)庫 Class.forName(“com.ibm.db2.jdbc.app.DB2Driver ”).newInstance();
String url=“jdbc:db2://localhost:5000/sample”;//sample為你的數(shù)據(jù)庫名
String user=“admin”;
String password=“”;
Connection conn= DriverManager.getConnection(url,user,password);
3.Sql Server7.0/2000數(shù)據(jù)庫
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url=“jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb”;
//mydb為數(shù)據(jù)庫
String user=“sa”;
String password=“”;
Connection conn= DriverManager.getConnection(url,user,password);
參考文獻(xiàn):
[1]蕭仁惠,陳錦輝.JDBC數(shù)據(jù)庫程序設(shè)計(jì)[M].北京:中國鐵道出版社,2004.2.
[2]洪偉恩.深入淺出Java 2面向?qū)ο蟪绦蛟O(shè)計(jì)[M].北京:中國鐵道出版社,2004.5.