范群星
(山西交通職業(yè)技術(shù)學(xué)院,山西 太原 030031)
基于JDBC的數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)的實(shí)現(xiàn)
范群星
(山西交通職業(yè)技術(shù)學(xué)院,山西 太原 030031)
為了避免應(yīng)用對(duì)數(shù)據(jù)庫(kù)的依賴(lài)性過(guò)強(qiáng),使應(yīng)用適用于不同的DBMS,JDBC數(shù)據(jù)庫(kù)連接標(biāo)準(zhǔn)為Java應(yīng)用程序提供了統(tǒng)一的API接口,可以很容易地把SQL語(yǔ)句傳送到任何關(guān)系型數(shù)據(jù)庫(kù)中。論文介紹了多種訪問(wèn)數(shù)據(jù)庫(kù)的接口標(biāo)準(zhǔn),并進(jìn)行了比較,同時(shí)使用簡(jiǎn)單實(shí)例演示了JDBC連接數(shù)據(jù)庫(kù)的過(guò)程。
SQL;API;ODBC;JDB;UDA
數(shù)據(jù)庫(kù)向用戶(hù)提供的數(shù)據(jù)查詢(xún)語(yǔ)言SQL是標(biāo)準(zhǔn)的,但這并不意味著數(shù)據(jù)庫(kù)對(duì)應(yīng)用提供的API(Application Program Interface)也是標(biāo)準(zhǔn)的。從應(yīng)用開(kāi)發(fā)的角度看,各個(gè)數(shù)據(jù)庫(kù)產(chǎn)品生產(chǎn)商向程序提供的API接口差異還是比較大的,因此,選擇適應(yīng)性更強(qiáng)的數(shù)據(jù)庫(kù)連接標(biāo)準(zhǔn)顯得非常重要。
1.開(kāi)放數(shù)據(jù)庫(kù)連接標(biāo)準(zhǔn)(Open Data Base Connectivity,ODBC)
ODBC由Microsoft公司提供,定義了數(shù)據(jù)庫(kù)訪問(wèn)的應(yīng)用程序接口,即API接口。ODBC的目的是屏蔽各種數(shù)據(jù)庫(kù)存取API接口的差異,為訪問(wèn)數(shù)據(jù)庫(kù)的應(yīng)用程序提供了一致的接口。應(yīng)用程序可以通過(guò)稱(chēng)為ODBC驅(qū)動(dòng)程序的不同的數(shù)據(jù)庫(kù)引擎訪問(wèn)不同的數(shù)據(jù)庫(kù)管理系統(tǒng)。
2.Java數(shù)據(jù)庫(kù)連接標(biāo)準(zhǔn)(Java DataBase Connectivity, JDBC)
JDBC和ODBC類(lèi)似,它為Java應(yīng)用程序提供了統(tǒng)一的API接口。JDBC包括兩個(gè)基本部分:一部分是面向開(kāi)發(fā)人員的JDBCAPI,其作用是為程序員提供不同的數(shù)據(jù)庫(kù)連接方式;另一部分是JDBC驅(qū)動(dòng)程序,它可以建立在ODBC基礎(chǔ)上,即程序?qū)DBC的訪問(wèn)先轉(zhuǎn)換為對(duì)ODBC的調(diào)用,然后利用ODBC完成數(shù)據(jù)庫(kù)訪問(wèn);JDBC也可以直接與數(shù)據(jù)庫(kù)連接。目前幾乎所有的應(yīng)用服務(wù)器都為Java程序提供JDBC接口。
3.統(tǒng)一數(shù)據(jù)存取標(biāo)準(zhǔn)(Universal Data Access,UDA)
UDA是Microsoft公司提出的一種標(biāo)準(zhǔn),它也力圖為應(yīng)用程序給出一個(gè)統(tǒng)一的API接口,其特點(diǎn)在于它針對(duì)的數(shù)據(jù)源不僅僅局限于關(guān)系數(shù)據(jù)庫(kù),而且可以是非關(guān)系型的數(shù)據(jù)文件、圖形圖像等。在UDA機(jī)制中,應(yīng)用程序通過(guò)ADO(Advanced Data Object)接口訪問(wèn)數(shù)據(jù),而ADO可通過(guò)OLE DB訪問(wèn)非關(guān)系型的數(shù)據(jù)或者通過(guò)ODBC驅(qū)動(dòng)程序訪問(wèn)不同的數(shù)據(jù)庫(kù)。
1.Java不能直接使用ODBC
因?yàn)镺DBC使用C語(yǔ)言接口,如果讓Java來(lái)調(diào)用本機(jī)C代碼的話,那會(huì)在安全、屬性、應(yīng)用的可移植性等方面帶來(lái)困難。
2.通過(guò)JDBC,可直接把ODBC翻譯成具有Java風(fēng)格的面向?qū)ο蟮慕涌?/p>
例如,ODBC使用了大量的易于出錯(cuò)的指針,而Java取消了這種不安全的指針,無(wú)須逐字翻譯。
3.JDBC的Java API提供“純Java”的解決辦法
當(dāng)使用ODBC時(shí),ODBC驅(qū)動(dòng)器管理程序與驅(qū)動(dòng)器必須手工地裝入到每架客戶(hù)機(jī)上。而JDBC驅(qū)動(dòng)器全部是用Java編寫(xiě)的,JDBC代碼則在所有Java平臺(tái) (從網(wǎng)絡(luò)計(jì)算機(jī)到主機(jī))上都可自動(dòng)安裝,并且是可移植的和安全的。
4.UDA的應(yīng)用不夠廣泛
UDA雖然提供了對(duì)不同數(shù)據(jù)源的一致的存取方式,但是遺憾的是,UDA機(jī)制目前除了在Microsoft的產(chǎn)品中有深入應(yīng)用外,其他IT廠商在產(chǎn)品方面的支持并不非常廣泛。
該實(shí)例使用的數(shù)據(jù)庫(kù)管理系統(tǒng)是MySQL,JSP容器是Tomcat 6.0,使用的MySQL版本是mysq1-6.0.11-alpha,Tomcat的版本是apache-tomcat-6.0.18。將兩個(gè)軟件分別進(jìn)行安裝、配置及測(cè)試。
1.準(zhǔn)備數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序和數(shù)據(jù)庫(kù)
(1)準(zhǔn)備數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序
要使用JDBC連接數(shù)據(jù)庫(kù),JDBC數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序是必不可少的,它是數(shù)據(jù)庫(kù)和Java編程語(yǔ)言的接口,這里所使用的數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序是mysq1-connector-java-5.1.10,將從 MySQL官方網(wǎng)站(http://www.mysql. com)上下載的壓縮包(mysql-connector-java-5.1.10.zip)解壓縮到本地硬盤(pán),然后將解壓目錄下的mysql-connector-java-5.1.10-bi n.j a r文件復(fù)制到 <TOMCAT_HOME>/lib目錄下。
(2)準(zhǔn)備數(shù)據(jù)庫(kù)
新建名為jdbctestdb的數(shù)據(jù)庫(kù),并在其下建立一個(gè)名為animalInfo的表,表中各數(shù)據(jù)字段如表1所示,并在表中添加如下的數(shù)據(jù),如表2所示。
表1 animalInfo數(shù)據(jù)表的數(shù)據(jù)字段
表2 animalInofo數(shù)據(jù)表的數(shù)據(jù)
2.編寫(xiě)訪問(wèn)數(shù)據(jù)庫(kù)的JSP文件
上述工作準(zhǔn)備完成后就可以編寫(xiě)訪問(wèn)數(shù)據(jù)庫(kù)的代碼了。
在該例中,要實(shí)現(xiàn)的功能就是把數(shù)據(jù)庫(kù)中的數(shù)據(jù)查詢(xún)出來(lái)并在頁(yè)面上顯示,將以下JSP文件代碼保存到j(luò)dbc.jsp文件中:
3.發(fā)布訪問(wèn)數(shù)據(jù)庫(kù)的Web應(yīng)用
首先,在<TOMCAT_HOME>/webapps目錄下新建一個(gè) JDBCFirst文件夾,在該文件夾下創(chuàng)建目錄WEB-INF,并在WEB-INF下創(chuàng)建目錄classes和文件web.xml。web.xml的代碼如下:
其次,將 jdbc.jsp文件和數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序mysql-connector-java-5.1.10.zip解壓目錄下的src文件夾復(fù)制到JDBCFirst目錄下。
最后,啟動(dòng)Tomcat,然后在瀏覽器地址欄中輸入如下地址:http://localhost:8080/JDBCFirst/jdbc.jsp,可以看到顯示結(jié)果。
1.Java數(shù)據(jù)庫(kù)連接(JDBC)由一組用Java編程語(yǔ)言編寫(xiě)的類(lèi)和接口組成。JDBC為工具/數(shù)據(jù)庫(kù)開(kāi)發(fā)人員提供了一個(gè)標(biāo)準(zhǔn)的API,使他們能夠用純Java API來(lái)編寫(xiě)數(shù)據(jù)庫(kù)應(yīng)用程序,并支持將SQL語(yǔ)句發(fā)送到相應(yīng)的任何一種關(guān)系型數(shù)據(jù)庫(kù),從而實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的連接。
2.由于在配置MYSQL服務(wù)器時(shí),已經(jīng)將其字符集設(shè)置為gb2312,而JSP文件也使用gb2312編碼,所以在顯示字符串內(nèi)容時(shí),不需要進(jìn)行字符集的轉(zhuǎn)換。否則就需要在顯示內(nèi)容的語(yǔ)句中使用<%=new String(rs. getString(“XXXX”).getBytes(“ISO8859-1”),”gb2312”)%>這樣的語(yǔ)句進(jìn)行字符集的轉(zhuǎn)換,以使數(shù)據(jù)能正常顯示。
3.如果在運(yùn)行時(shí)提示javax.servlet.ServletException: com.mysql.jdbc.Driver或java.lang.ClassNot FoundException:com.mysql.jdbc.Driver錯(cuò)誤,請(qǐng)確保已經(jīng)正確安裝了數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序。
4.直接在命令提示符下進(jìn)行mysql數(shù)據(jù)庫(kù)的操作比較復(fù)雜,如果使用mysql提供的mysqldump工具實(shí)現(xiàn)的話,就容易且方便得多。
[1]劉軍,馬敏書(shū).電子商務(wù)系統(tǒng)的分析與設(shè)計(jì)[M].北京:高等教育出版社,2008:286-295.
[2]鄭彥孚.MySQL的JDBC編程實(shí)例[J].電腦開(kāi)發(fā)及應(yīng)用,2007,(1):58-63.
[3]樊新華,孟鉑.基于JDBC的通用的訪問(wèn)數(shù)據(jù)庫(kù)方法[J].電腦知識(shí)與技術(shù),2008,(7):1545-1546,1554.
[4]張作宸.JDBC原理及操縱數(shù)據(jù)庫(kù)方法[J].科技信息,2009,(2):490.
[5]童少娟.淺談Java數(shù)據(jù)庫(kù)連接[J].中國(guó)校外教育,2009,(7):168.
[6]郭廣軍,陳代武,胡玉平,李芝城.基于JDBC的數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)的研究[J].南華大學(xué)學(xué)報(bào)(自然科學(xué)版),2005,(6):50-54,57.
TP
A
1673-0046(2010)7-0174-03
太原城市職業(yè)技術(shù)學(xué)院學(xué)報(bào)2010年7期