基于ODBC-JDBC的數(shù)據(jù)庫(kù)連接策略的實(shí)現(xiàn)與優(yōu)化論文
【摘 要】使用JSP技術(shù)開(kāi)發(fā)動(dòng)態(tài)交互式Web信息系統(tǒng)是當(dāng)今Internet主流技術(shù)之一,隨著網(wǎng)絡(luò)應(yīng)用和電子商務(wù)的迅速發(fā)展,站點(diǎn)與數(shù)據(jù)庫(kù)連接的操作越來(lái)越頻繁,也越來(lái)越復(fù)雜。通過(guò)分析現(xiàn)有的數(shù)據(jù)庫(kù)連接技術(shù),選擇使用ODBC-JDBC橋驅(qū)動(dòng)程序作為JDBC的驅(qū)動(dòng)程序,介紹其連接策略、實(shí)現(xiàn)方法,并對(duì)其從驅(qū)動(dòng)程序、連接對(duì)象、執(zhí)行對(duì)象等方面進(jìn)行優(yōu)化策略分析。
【關(guān)鍵詞】ODBC-JDBC,實(shí)現(xiàn)方法,優(yōu)化策略
1 數(shù)據(jù)庫(kù)連接技術(shù)介紹
數(shù)據(jù)庫(kù)軟件設(shè)計(jì)開(kāi)發(fā)不可避免地應(yīng)用數(shù)據(jù)庫(kù)連接,建立數(shù)據(jù)庫(kù)連接,與數(shù)據(jù)庫(kù)進(jìn)行通信,執(zhí)行SQl語(yǔ)句并檢索查詢(xún)結(jié)果。目前實(shí)現(xiàn)上述活動(dòng)的常用技術(shù)是ODBC和JDBC。
ODBC是Open DataBase Connectivity的縮寫(xiě),是微軟公司提供的應(yīng)用程序接口,用于訪問(wèn)數(shù)據(jù)庫(kù)。使用結(jié)構(gòu)化查詢(xún)語(yǔ)言作為其數(shù)據(jù)庫(kù)語(yǔ)言,并提供插入、修改和刪除數(shù)據(jù)庫(kù)以及從數(shù)據(jù)庫(kù)中提取信息的功能。
JDBC是Java DataBase Connectivity的縮寫(xiě),是Sun Microsystems提供的Java API一部分,它定義了一組API對(duì)象以及與數(shù)據(jù)庫(kù)進(jìn)行交互的方法。
ADO是Activex Data Objects的縮寫(xiě),是一個(gè)用于存取數(shù)據(jù)源的COM組建。提供了編程語(yǔ)言和統(tǒng)一數(shù)據(jù)訪問(wèn)方式OLE DB的一個(gè)中間層。允許開(kāi)發(fā)人員編寫(xiě)訪問(wèn)數(shù)據(jù)的代碼而不用關(guān)心數(shù)據(jù)庫(kù)如何實(shí)現(xiàn),而只關(guān)心到數(shù)據(jù)庫(kù)的連接。
ADO.net是在.net編程環(huán)境中優(yōu)先使用的數(shù)據(jù)訪問(wèn)接口。他提供了數(shù)據(jù)訪問(wèn)的互用性和可伸縮性。
ADO.net是一組用于和數(shù)據(jù)源進(jìn)行交互的面向?qū)ο蟮念?lèi)庫(kù)。通常情況下,數(shù)據(jù)源是數(shù)據(jù)庫(kù),但同樣也能夠是文本文件、Excel表格或者是XML文件。
2 Java中連接技術(shù)選擇
ODBC使用的是C語(yǔ)言接口,對(duì)于Java而言,對(duì)本地C語(yǔ)言代碼的調(diào)用在應(yīng)用程序的安全性、實(shí)現(xiàn)性、健壯性以及可移植性等方面存在缺陷,束縛了ODBC驅(qū)動(dòng)程序在Java應(yīng)用程序中的應(yīng)用。
盡管Java中存在的Java.io包提供了豐富的類(lèi)和接口,但是通過(guò)這些類(lèi)和接口訪問(wèn)的數(shù)據(jù)是以流的形式表示的,因此對(duì)于訪問(wèn)存儲(chǔ)在外部數(shù)據(jù)提供的程序,比如SQLServer、Oracle和Access中的數(shù)據(jù)的所有Java應(yīng)用程序而言,JDBC是彌補(bǔ)缺陷的良藥,是必須的。
在Java語(yǔ)言中, JDBC ( Java DataBaseConnection)是應(yīng)用程序與數(shù)據(jù)庫(kù)溝通的橋梁,即Java語(yǔ)言通過(guò)JDBC技術(shù)訪問(wèn)數(shù)據(jù)庫(kù)。JDBC是一種“開(kāi)放”的方案,它為數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)人員、數(shù)據(jù)庫(kù)前臺(tái)工具開(kāi)發(fā)人員提供了一種標(biāo)準(zhǔn)的應(yīng)用程序設(shè)計(jì)接口,使開(kāi)發(fā)人員可以用純Java語(yǔ)言編寫(xiě)完整的數(shù)據(jù)庫(kù)應(yīng)用程序。
JDBC提供兩種API,分別是面向開(kāi)發(fā)人員的API和面向底層的JDBC驅(qū)動(dòng)程序API,底層主要通過(guò)直接的JDBC驅(qū)動(dòng)和JDBC-ODBC橋驅(qū)動(dòng)實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的連接。
一般來(lái)說(shuō),Java應(yīng)用程序訪問(wèn)數(shù)據(jù)庫(kù)的過(guò)程是:①裝載數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序;
、谕ㄟ^(guò)JDBC建立數(shù)據(jù)庫(kù)連接;
、墼L問(wèn)數(shù)據(jù)庫(kù),執(zhí)行SQL語(yǔ)句;
、軘嚅_(kāi)數(shù)據(jù)庫(kù)連接。
對(duì)于共享資源,有一個(gè)很著名的設(shè)計(jì)模式:資源池(Resource Pool)。該模式正是為了解決資源的頻繁分配 釋放所造成的問(wèn)題。為解決上述問(wèn)題,可以采用數(shù)據(jù)庫(kù)連接池技術(shù)。數(shù)據(jù)庫(kù)連接池的基本思想就是為數(shù)據(jù)庫(kù)連接建立一個(gè)“緩沖池”。預(yù)先在緩沖池中放入一定數(shù)量的連接,當(dāng)需要建立數(shù)據(jù)庫(kù)連接時(shí),只需從“緩沖池”中取出一個(gè),使用完畢之后再放回去。我們可以通過(guò)設(shè)定連接池最大連接數(shù)來(lái)防止系統(tǒng)無(wú)盡的與數(shù)據(jù)庫(kù)連接。更為重要的是我們可以通過(guò)連接池的管理機(jī)制監(jiān)視數(shù)據(jù)庫(kù)的連接的數(shù)量、使用情況,為系統(tǒng)開(kāi)發(fā)、測(cè)試及性能調(diào)整提供依據(jù)。
因此,為了提高訪問(wèn)數(shù)據(jù)庫(kù)數(shù)據(jù)的效率,Java應(yīng)用程序選擇了JDBC,使用ODBC-JDBC橋驅(qū)動(dòng)程序連接數(shù)據(jù)庫(kù),從JDBC訪問(wèn)ODBC數(shù)據(jù)源。
3 連接策略的實(shí)現(xiàn)
開(kāi)發(fā)基于ODBC-JDBC的數(shù)據(jù)庫(kù)連接應(yīng)用程序步驟如下:①為數(shù)據(jù)庫(kù)創(chuàng)建數(shù)據(jù)源②導(dǎo)入Java.sql包③加載驅(qū)動(dòng)程序④加載將連接該數(shù)據(jù)源的驅(qū)動(dòng)程序,使用Class.forName()方法,將給定的類(lèi)加載到Java虛擬機(jī)中⑤創(chuàng)建連接對(duì)象DriverManager類(lèi)試圖找到一個(gè)能夠連接至URL中指定的數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序。這個(gè)類(lèi)跟蹤已注冊(cè)的驅(qū)動(dòng)程序,當(dāng)調(diào)用getConnection()方法時(shí),它會(huì)搜索整個(gè)該驅(qū)動(dòng)程序列表,直到找到一個(gè)能夠連接至URL中指定的數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序。加載此驅(qū)動(dòng)程序后,使用getConnection()方法建立與數(shù)據(jù)源的連接。此方法中有3個(gè)接收參數(shù),分別表示數(shù)據(jù)源的名稱(chēng)、數(shù)據(jù)源連接所使用的類(lèi)型以及用戶(hù)名、密碼。
、迍(chuàng)建執(zhí)行對(duì)象并執(zhí)行
一旦建立連接,就使用該連接將SQL語(yǔ)句傳遞給它所連接的數(shù)據(jù)庫(kù)。然后使用Connection類(lèi)的createStatement()方法創(chuàng)建Statement接口實(shí)例。執(zhí)行查詢(xún)最有效的方法是使用Statement接口中的executeQuery()方法,接收SQL查詢(xún)字段作為參數(shù),并返回包括查詢(xún)結(jié)果的ResultSet。
執(zhí)行更新數(shù)據(jù)庫(kù),包括插入數(shù)據(jù),修改數(shù)據(jù)或者刪除數(shù)據(jù),一方面需要編寫(xiě)數(shù)據(jù)更新的SQL語(yǔ)句,它不會(huì)將結(jié)果作為ResultSet返回,而是返回一個(gè)整數(shù),表示受該語(yǔ)句影響的行數(shù)。另一方面使用executeUpdate()方法。
、呓邮、存放執(zhí)行結(jié)果
使用Statement對(duì)象構(gòu)建并執(zhí)行SQL語(yǔ)句以執(zhí)行對(duì)數(shù)據(jù)庫(kù)的操作,操作結(jié)果返回給ResultSet對(duì)象。
、嚓P(guān)閉對(duì)象和連接
關(guān)閉ResultSet對(duì)象、Statement對(duì)象、關(guān)閉連接。
4 連接策略的優(yōu)化
4.1 連接中驅(qū)動(dòng)程序的優(yōu)化使用本地API部分Java驅(qū)動(dòng)程序的速度要比基于ODBC-JDBC橋的數(shù)據(jù)庫(kù)連接速度快,它將JDBC調(diào)用轉(zhuǎn)換成對(duì)DBMS客戶(hù)端API的調(diào)用,它使用本地?cái)?shù)據(jù)庫(kù)API的Java本地接口訪問(wèn)數(shù)據(jù)庫(kù)。
與ODBC驅(qū)動(dòng)程序一樣,它也需要在客戶(hù)機(jī)上使用本地二進(jìn)制代碼,并要求安裝和配置數(shù)據(jù)庫(kù)。隨著網(wǎng)絡(luò)技術(shù)、中間件技術(shù)的縱深發(fā)展和不斷完善,使用網(wǎng)絡(luò)協(xié)議和中間件與服務(wù)器進(jìn)行通信,然后服務(wù)器將該協(xié)議和中間件轉(zhuǎn)換成特定于DBMS的方法調(diào)用,這是JDBC網(wǎng)絡(luò)純Java驅(qū)動(dòng)程序下的數(shù)據(jù)庫(kù)連接,此驅(qū)動(dòng)程序開(kāi)始獨(dú)立于數(shù)據(jù)庫(kù),將JDBC轉(zhuǎn)換成本地專(zhuān)有數(shù)據(jù)庫(kù)調(diào)用,還支持對(duì)多個(gè)后端數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn)。
4.2 執(zhí)行對(duì)象選擇的優(yōu)化
在數(shù)據(jù)庫(kù)連接過(guò)程中存在多次執(zhí)行同一操作的情況,為了提高SQL語(yǔ)句的接收、編譯效率,可用PreparedStatement()方法創(chuàng)建PreparedStatement對(duì)象,因?yàn)镻reparedStatement對(duì)象用于預(yù)編譯的SQL語(yǔ)句,可以接收一個(gè)或者多個(gè)參數(shù)作為輸入?yún)?shù),提高了效率。另外它還增添了設(shè)置值所需要的一整套方法,可以將這些方法發(fā)送到數(shù)據(jù)庫(kù)以代替參數(shù)的占位符。
4.3 連接對(duì)象的優(yōu)化
使用連接池是實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)優(yōu)化的重要途徑之一。如果每次Web應(yīng)用接受到請(qǐng)求,就向數(shù)據(jù)庫(kù)要求一個(gè)連接,當(dāng)執(zhí)行完就通知數(shù)據(jù)庫(kù)中斷連接,這樣的方式將會(huì)耗費(fèi)大量的時(shí)間與資源。而連接池的運(yùn)作方式是一開(kāi)始向數(shù)據(jù)庫(kù)要求很多Connection連接存儲(chǔ)在一個(gè)Pool池內(nèi),讓需要的人從連接池中取Connection,等到用完之后再放回連接池,從而讓W(xué)eb應(yīng)用與數(shù)據(jù)庫(kù)之間能夠獲得最大的執(zhí)行效率。
5 結(jié)束語(yǔ)
數(shù)據(jù)庫(kù)連接的實(shí)現(xiàn)是數(shù)據(jù)庫(kù)軟件開(kāi)發(fā)過(guò)程中必不可少的組成部分,數(shù)據(jù)庫(kù)連接的優(yōu)化關(guān)系到數(shù)據(jù)查詢(xún)、更新的執(zhí)行效率,成為衡量系統(tǒng)開(kāi)發(fā)性能的重要指標(biāo),因此數(shù)據(jù)庫(kù)連接策略的實(shí)現(xiàn)和優(yōu)化是一項(xiàng)系統(tǒng)工程,值得我們?cè)陂_(kāi)發(fā)實(shí)踐中不斷的探索和挖掘。
參考文獻(xiàn)
[1]王 強(qiáng).高校綜合人力資源管理系統(tǒng)的數(shù)據(jù)庫(kù)優(yōu)化策略研究[J].電腦知識(shí)與技術(shù),2010,17(10):50-51.
[2]孫鑫鴿,陳 剛,孫小玲.基于JDBC的數(shù)據(jù)庫(kù)連接池技術(shù)的研究與設(shè)計(jì)[J].計(jì)算機(jī)與信息技術(shù),2007,15(5):61-62.
[3]王秀義.基于JDBC的數(shù)據(jù)庫(kù)連接池及實(shí)現(xiàn)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2005,22(4):43-45.
【基于ODBC-JDBC的數(shù)據(jù)庫(kù)連接策略的實(shí)現(xiàn)與優(yōu)化論文】相關(guān)文章:
優(yōu)化農(nóng)機(jī)裝備結(jié)構(gòu)的策略分析論文05-05
企業(yè)稅務(wù)管理的問(wèn)題優(yōu)化策略論文02-22
公共體育教學(xué)現(xiàn)狀與優(yōu)化策略論文02-18
淺談基于RFID 的會(huì)議簽到系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)論文02-20
基于智能優(yōu)化算法的Wiener模型辨識(shí)論文提綱12-05
提升網(wǎng)站圖片的優(yōu)化效果的幾種策略淺析的論文03-23
淺析基于情感培養(yǎng)的教學(xué)策略論文12-09
企業(yè)數(shù)據(jù)庫(kù)安全防護(hù)及維護(hù)策略論文11-11
淺談基于Openstack 的網(wǎng)絡(luò)攻防實(shí)驗(yàn)平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)論文02-20
醫(yī)療空間環(huán)境與優(yōu)化設(shè)計(jì)策略論文提綱11-17
- 相關(guān)推薦