付宗見 楊志獻(xiàn)
摘要:Java語(yǔ)言是當(dāng)前普遍使用的計(jì)算機(jī)數(shù)據(jù)庫(kù)編程語(yǔ)言,該文首先介紹了Java連接數(shù)據(jù)庫(kù)的主要方法,并從JDBC的特點(diǎn)出發(fā),詳細(xì)探討了提高Java數(shù)據(jù)庫(kù)訪問效率的幾種方法。
關(guān)鍵詞:數(shù)據(jù)庫(kù)訪問;Java;JDBC
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)24-5595-02
數(shù)據(jù)庫(kù)在軟件開發(fā)中的應(yīng)用十分廣泛。對(duì)數(shù)據(jù)庫(kù)進(jìn)行連接是應(yīng)用數(shù)據(jù)庫(kù)的一個(gè)重要前提。Java語(yǔ)言由于具有不依賴系統(tǒng)平臺(tái)、語(yǔ)言系統(tǒng)發(fā)達(dá)、安全等特點(diǎn),而且一次編寫就能在各處運(yùn)行,因此在眾多計(jì)算機(jī)編程語(yǔ)言中脫穎而出,成為了當(dāng)前最被大眾認(rèn)可的編程語(yǔ)言。在Java語(yǔ)言中,對(duì)數(shù)據(jù)庫(kù)進(jìn)行有效的訪問需要以JDBC作為前提。所謂JDBC,就是利用Java語(yǔ)言編寫的一系列的類和接口,利用JDBC可以方便快捷的實(shí)現(xiàn)對(duì)任何一個(gè)數(shù)據(jù)庫(kù)的有效連接。
1 JDBC概述
1.1 JDBC的產(chǎn)生背景
Java語(yǔ)言的優(yōu)點(diǎn)很多,它語(yǔ)言系統(tǒng)發(fā)達(dá)、通俗易懂、便于編寫,能夠從網(wǎng)絡(luò)上自動(dòng)下載,不依賴系統(tǒng)平臺(tái),因此是進(jìn)行數(shù)據(jù)庫(kù)應(yīng)用程序開發(fā)的理想語(yǔ)言。隨著Java的應(yīng)用越來(lái)越廣泛,越來(lái)越多的Java語(yǔ)言使用者都渴望編寫出可不依賴數(shù)據(jù)庫(kù)管理系統(tǒng)( Data Base Management system)而獨(dú)立存在的程序,從而方便對(duì)各種各樣的數(shù)據(jù)庫(kù)的連接過(guò)程,使訪問更加方便。所以,定義一個(gè)通用的SQL數(shù)據(jù)庫(kù)存取框架有相當(dāng)?shù)钠惹行院捅匾?,通過(guò)數(shù)據(jù)庫(kù)存取框架在數(shù)據(jù)庫(kù)的連接模塊上生成統(tǒng)一的界面,從而使得應(yīng)用程序的開發(fā)者能夠給出多樣化的連接方案。而實(shí)現(xiàn)上述功能,所唯一欠缺的在于如何實(shí)現(xiàn)Java語(yǔ)言和各式各樣的數(shù)據(jù)庫(kù)之間的無(wú)障礙溝通,而利用JDBC,可以完美的解決這個(gè)問題。
1.2 JDBC的特點(diǎn)
在Java中,有兩個(gè)JDBC接口,一個(gè)JDBC接口是在底層的JDBC Driver API,另一個(gè)被用于Application Programe Interface,即面向程序員的應(yīng)用程序接口。位于底層的JDBC Driver API主要有四個(gè)形式,即JDBC-ODBC橋形式、部分Java驅(qū)動(dòng)程序和本機(jī)API的組合形式、面向數(shù)據(jù)庫(kù)中間件的純Java驅(qū)動(dòng)程序以及直接面向數(shù)據(jù)庫(kù)的純Java驅(qū)動(dòng)程序。其中,JDBC-ODBC橋的形式為了用戶能夠成功讀取ODBC上的數(shù)據(jù)信息,要求客戶端必須要有ODBC的驅(qū)動(dòng)程序,因而給推廣應(yīng)用造成了一定的困難。而部分Java驅(qū)動(dòng)程序與本機(jī)API相結(jié)合的形式,需要通過(guò)本地代碼的形式完成對(duì)數(shù)據(jù)庫(kù)的API調(diào)用,然后將JDBC API轉(zhuǎn)化成與商用數(shù)據(jù)庫(kù)相匹配的API,以此來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)所提供數(shù)據(jù)的使用。面向數(shù)據(jù)庫(kù)中間件的純Java驅(qū)動(dòng)程序在中間件服務(wù)器中隱藏了Java的細(xì)節(jié),因此不需要考慮Java程序的細(xì)節(jié),根據(jù)這個(gè)特性,能夠使用一樣的代碼實(shí)現(xiàn)對(duì)不一樣數(shù)據(jù)庫(kù)的訪問。直接面向數(shù)據(jù)庫(kù)的純Java驅(qū)動(dòng)程序的訪問方式比較直接,直接在服務(wù)器上處理發(fā)自客戶端的請(qǐng)求,并顯示程序的執(zhí)行結(jié)果,直接面向數(shù)據(jù)庫(kù)的純Java驅(qū)動(dòng)程序的使用比較簡(jiǎn)單,不需要安裝驅(qū)動(dòng)程序或者附加軟件,因此與前幾種相比有其獨(dú)特的優(yōu)勢(shì)。
2 優(yōu)化SQL語(yǔ)句格式
在通過(guò)Java語(yǔ)言對(duì)數(shù)據(jù)庫(kù)進(jìn)行連接時(shí),連接的效果與SQL語(yǔ)句的格式有一定的關(guān)系。在實(shí)際操作中,一般SQL語(yǔ)句的執(zhí)行都是通過(guò)Statement對(duì)象實(shí)現(xiàn)的,這樣的辦法比較笨拙,需要每一次都解析編譯數(shù)據(jù)庫(kù),工作量大,在極大程度上降低了對(duì)數(shù)據(jù)庫(kù)的訪問效率。而通過(guò)Prepared Statement對(duì)象來(lái)實(shí)現(xiàn)對(duì)SQL語(yǔ)句的執(zhí)行就不會(huì)出現(xiàn)這樣的現(xiàn)象。通過(guò)Prepared Statement,命令會(huì)根據(jù)特定的機(jī)制被數(shù)據(jù)庫(kù)進(jìn)行解析編譯,然后在特定的存儲(chǔ)區(qū)域進(jìn)行暫時(shí)的儲(chǔ)存,這樣在下一次訪問數(shù)據(jù)庫(kù)時(shí),只需要再一次進(jìn)行命令解析就可以了,不需要進(jìn)行額外的編譯,在一定程度上提高了訪問數(shù)據(jù)庫(kù)的效率。
同時(shí),利用Prepared Statement為對(duì)象執(zhí)行SQL語(yǔ)言,通過(guò)配合數(shù)據(jù)庫(kù)批量更新機(jī)制的方式,即一次性調(diào)用整批的更新命令,一次性實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的全面更新,能夠進(jìn)一步提升訪問數(shù)據(jù)庫(kù)的效率。因此,在實(shí)際操作時(shí),利用Prepared Statement代替Statement作為SQL語(yǔ)句的執(zhí)行對(duì)象受到了普遍的使用。值得注意的是,在具體的操作層面,需要對(duì)數(shù)據(jù)庫(kù)及其驅(qū)動(dòng)配置是否支持批量更新進(jìn)行必要的檢查,在檢查時(shí),需要用到Data base Meta Data對(duì)象所提供的Support Batch UP dates的辦法。
3 使用數(shù)據(jù)庫(kù)連接池技術(shù)
數(shù)據(jù)庫(kù)連接池技術(shù)是以JDBC為前提,在實(shí)踐過(guò)程中逐漸改進(jìn)逐漸完善的一種技術(shù)。數(shù)據(jù)庫(kù)連接池技術(shù)的優(yōu)點(diǎn)在于以重用一組連接對(duì)象的方式,幫助用戶共享一組己經(jīng)打開的連接,省去了自主連接數(shù)據(jù)庫(kù)所需要的時(shí)間時(shí)間,最大限度上提升了Java訪問數(shù)據(jù)庫(kù)的效率。
數(shù)據(jù)庫(kù)連接池技術(shù)功能的實(shí)現(xiàn)依靠于預(yù)設(shè)的一個(gè)緩沖池,在緩沖池中存儲(chǔ)數(shù)據(jù)庫(kù)中的各種數(shù)據(jù),并將一定數(shù)量的數(shù)據(jù)連接進(jìn)行預(yù)先存儲(chǔ),這樣,在Java訪問數(shù)據(jù)庫(kù)時(shí),根據(jù)實(shí)際的需要從“緩沖池”中找到相對(duì)應(yīng)的連接,在訪問完成以后,再將連接重新存儲(chǔ)進(jìn)緩沖池。由緩沖池負(fù)責(zé)對(duì)數(shù)據(jù)連接的存儲(chǔ)和整理工作,極大程度的減輕了用戶的工作量,,利用這樣的方法,可以有效的提升數(shù)據(jù)庫(kù)的訪問效率。
使用數(shù)據(jù)庫(kù)連接池技術(shù),其技術(shù)要點(diǎn)在于連接池的建立方式以及如何實(shí)現(xiàn)對(duì)存儲(chǔ)在連接池中的各類連接的有效整理。解決好了這兩個(gè)問題,數(shù)據(jù)庫(kù)連接池技術(shù)的發(fā)展就變得更加成熟。通常說(shuō)來(lái),在連接池的建立上,需要以讀取XML文件中的配置參數(shù)的方式來(lái)實(shí)現(xiàn)。通過(guò)讀取XML文件中的配置參數(shù),能夠在系統(tǒng)中建立一個(gè)靜態(tài)的緩沖池,這個(gè)緩沖池對(duì)于數(shù)據(jù)庫(kù)而言是唯一的,而且其配置參數(shù)也是明確的。在建立好數(shù)據(jù)庫(kù)連接池以后,還需要保證連接池的運(yùn)行穩(wěn)定性,以便于用戶能夠從連接池中有效的提取自己想要的連接。
在解決了數(shù)據(jù)庫(kù)連接池的建立問題以后,還需要對(duì)連接池實(shí)施高效的管理,保證存儲(chǔ)在連接池中連接的有序性。管理連接池可以采用的方法有很多,每一種管理方式可能取得的管理效果都會(huì)有所不同。在實(shí)際操作中,應(yīng)該根據(jù)實(shí)際情況采用最合適的管理方式。目前階段,在數(shù)據(jù)庫(kù)連接池的管理方式使用的較為廣泛的方法是Reference Counting的辦法。
4 采用Java多線程技術(shù)
Java多線程技術(shù)的優(yōu)勢(shì)十分明顯,在JAVA多線程技術(shù)中,同步機(jī)制是至關(guān)重要的一項(xiàng)基礎(chǔ)保障,同步機(jī)制能夠保證線程間的同步,保證線程間的相互通信,是多線程技術(shù)得以實(shí)現(xiàn)的大前提。在Java中已經(jīng)提供了幾類可供直接使用的方法來(lái)實(shí)現(xiàn)線程間的同步。在劃分臨界資源時(shí)可借助synchronized這一關(guān)鍵詞來(lái)對(duì)語(yǔ)句塊進(jìn)行標(biāo)示,其他Object類中的方法以及Tread類中的方法也能夠被直接用來(lái)處理不同線程的啟用或中斷操作。采用多線程技術(shù)來(lái)提高數(shù)據(jù)庫(kù)的訪問效率時(shí)關(guān)鍵問題并不在于技術(shù)本身,而是對(duì)線程的有效管理,這取決于程序設(shè)計(jì)者的控制能力。
5 結(jié)束語(yǔ)
綜上所述,Java語(yǔ)言是當(dāng)前主流的編程語(yǔ)言,在JAVA語(yǔ)言成為主流的背景下,如何利用Java語(yǔ)言的優(yōu)勢(shì),提高訪問數(shù)據(jù)庫(kù)的效率是值得廣大業(yè)內(nèi)人士進(jìn)一步探討的問題。通過(guò)本文所列舉的優(yōu)化SQL語(yǔ)言格式、數(shù)據(jù)庫(kù)連接池技術(shù)以及Java多線程技術(shù)三種方法,可以有效的提高數(shù)據(jù)庫(kù)的訪問效率,具有廣泛的應(yīng)用前景。
參考文獻(xiàn):
[1] 谷慶華,李成貴.基于Java語(yǔ)言實(shí)現(xiàn)數(shù)據(jù)庫(kù)的訪問[J].計(jì)算機(jī)技術(shù)與發(fā)展,2008,18(2):143-144.
[2] 周書鋒,張懷偉,韓紅艷.基于Java語(yǔ)言的數(shù)據(jù)庫(kù)訪問[J].福建電腦,2005,9(24):34-35.
[3] 徐萍.JAVA訪問SQL數(shù)據(jù)庫(kù)的優(yōu)化探討[J].探索與觀察,2010,10(32):61-62.