廖夢(mèng)虎(武漢鐵路職業(yè)技術(shù)學(xué)院電子電氣工程系,湖北 武漢430205)
JSP(Java Server Pages)是由Sun公司倡導(dǎo)、許多公司參與一起建立的一種動(dòng)態(tài)網(wǎng)頁技術(shù)標(biāo)準(zhǔn),它是在傳統(tǒng)的網(wǎng)頁 HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP標(biāo)記(tag),從而形成JSP文件(*.jsp)。JSP將網(wǎng)頁邏輯與網(wǎng)頁設(shè)計(jì)和顯示分離,支持可重用的基于組件的設(shè)計(jì),使基于Web的應(yīng)用程序的開發(fā)變得迅速和容易,因而在動(dòng)態(tài)網(wǎng)頁實(shí)現(xiàn)中,具有比PHP和ASP.NET無可比擬的優(yōu)勢(shì)。使用JSP開發(fā)的Web應(yīng)用,既能在Linux下運(yùn)行,也能在其他操作系統(tǒng)上運(yùn)行。JSP具備了Java技術(shù)的簡單易用特點(diǎn),完全的面向?qū)ο?,具有平臺(tái)無關(guān)性且安全可靠。下面,筆者主要介紹了JSP中訪問數(shù)據(jù)庫的常用方法。
JDBC(Java DataBase Connectivity,Java數(shù)據(jù)庫連接)是SUN公司提供的與平臺(tái)無關(guān)的數(shù)據(jù)庫標(biāo)準(zhǔn)API(Application Programming Interface,應(yīng)用程序設(shè)計(jì)接口),是由一組用Java語言編寫的類和接口組成,這些類和接口位于java.sql包中。JDBC為數(shù)據(jù)庫開發(fā)人員提供了一個(gè)標(biāo)準(zhǔn)的API,使得開發(fā)人員利用Java語言就可開發(fā)訪問數(shù)據(jù)庫的應(yīng)用程序。
ODBC是Microsoft公司開發(fā)的標(biāo)準(zhǔn)數(shù)據(jù)庫訪問接口,使用這個(gè)接口,無須修改程序就可以訪問各種不同的數(shù)據(jù)庫[1]。通過JDBCODBC橋連接數(shù)據(jù)庫的示意圖如圖1所示。
DBC-ODBC橋驅(qū)動(dòng)程序主要功能是把JDBC API調(diào)用轉(zhuǎn)換成ODBC API調(diào)用,然后ODBC API調(diào)用針對(duì)供應(yīng)商的ODBC驅(qū)動(dòng)程序來訪問數(shù)據(jù)庫,即利用JDBC-ODBC橋通過ODBC來存取數(shù)據(jù)源[2-4]。
圖1 JDBC-ODBC橋連接數(shù)據(jù)庫示意圖
應(yīng)用程序在使用JDBC-ODBC橋連接數(shù)據(jù)庫之前,必須將橋驅(qū)動(dòng)程序類sun.jdbc.odbc.JdbcOdbcDriver添加到名為jdbc.drivers的java.lang.System屬性中,或用Java類加載器將其顯式地加載。Java類加載器加載方法如下:
加載時(shí),ODBC驅(qū)動(dòng)程序(與所有JDBC驅(qū)動(dòng)程序一樣)將創(chuàng)建它自己的實(shí)例,同時(shí)在JDBC驅(qū)動(dòng)程序管理器中進(jìn)行注冊(cè)。只要本地機(jī)裝有相關(guān)的ODBC驅(qū)動(dòng),那么采用JDBC-ODBC橋幾乎可以訪問所有的數(shù)據(jù)庫,JDBC-ODBC方法對(duì)于客戶端已經(jīng)具備ODBC Driver的應(yīng)用是可行的。
通過JDBC專用驅(qū)動(dòng)程序?qū)崿F(xiàn)數(shù)據(jù)庫訪問的方法是通過Java提供的用于各種數(shù)據(jù)庫(MSSQL Server,Oracle,DB2,sybase,MySQL等)的專用驅(qū)動(dòng)程序來實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的訪問。在使用這種方法之前,首先將相關(guān)的數(shù)據(jù)庫專用驅(qū)動(dòng)程序放到服務(wù)器的ClassPath路徑下,然后在JSP程序中創(chuàng)建數(shù)據(jù)庫連接就可以使用數(shù)據(jù)庫中的信息進(jìn)行數(shù)據(jù)處理操作。純JDBC連接數(shù)據(jù)庫方式如圖2所示。
JDBC連接數(shù)據(jù)庫分為2個(gè)步驟:加載驅(qū)動(dòng)程序和建立連接。
圖2 JDBC連接數(shù)據(jù)庫方式
為了與特定的數(shù)據(jù)庫或數(shù)據(jù)源相連,JDBC必須加載相應(yīng)的驅(qū)動(dòng)程序。驅(qū)動(dòng)程序可以是JDBC-ODBC橋接驅(qū)動(dòng)程序,也可以是數(shù)據(jù)庫廠商提供的純JDBC驅(qū)動(dòng)程序。JSP中加載驅(qū)動(dòng)程序使用Class.ForName方法,方法如下:
1)JDBC-ODBC橋連接驅(qū)動(dòng)程序加載。JDBC-ODBC橋連接驅(qū)動(dòng)程序加載方法如下:
2)純JDBC驅(qū)動(dòng)方式加載。純JDBC驅(qū)動(dòng)方式加載也使用Class.forName方法,其格式如下:
其中,url為某一數(shù)據(jù)庫連接驅(qū)動(dòng)。
當(dāng)數(shù)據(jù)庫連接成功后,JSP使用DriverManager類的getConnection方法建立與數(shù)據(jù)庫或數(shù)據(jù)源的連接,該方法有2種重載形式[5]:
其中,參數(shù)url必須是一個(gè)符合JDBC URL(URL,統(tǒng)一資源定位器)規(guī)范的字符串;參數(shù)user和password是指登錄數(shù)據(jù)庫所需要的用戶名和密碼。JDBC URL字符串的格式如下:
其中,jdbc指連接數(shù)據(jù)庫或數(shù)據(jù)源的協(xié)議,在JDBC URL中總是jdbc;<subprotocol>指驅(qū)動(dòng)程序或數(shù)據(jù)庫連接機(jī)制,使用JDBC-ODBC橋連接時(shí)固定是odbc,它也可以是一個(gè)網(wǎng)絡(luò)服務(wù)名字;<subname>根據(jù)<subprotocol>不同,可能是數(shù)據(jù)源的名稱,或是定位數(shù)據(jù)庫的一串字符。
使用JDBC-ODBC橋連接數(shù)據(jù)庫,必須建立ODBC數(shù)據(jù)源(Data Source Name,DSN),使用ODBC子協(xié)議連接到數(shù)據(jù)庫。DSN包括系統(tǒng)DSN、用戶DSN和文件DSN 3種,在設(shè)置供Web服務(wù)器使用的DSN時(shí),必須使用系統(tǒng)DSN。下面的實(shí)例是通過JDBC-ODBC橋連接數(shù)據(jù)庫,系統(tǒng)數(shù)據(jù)源可使用Windows的ODBC數(shù)據(jù)源管理器配置。連接數(shù)據(jù)庫的代碼如下:
對(duì)于Access數(shù)據(jù)庫,可以不建立數(shù)據(jù)源,直接使用下面的方式建立連接:
使用專用JDBC驅(qū)動(dòng)程序連接數(shù)據(jù)庫不需配置數(shù)據(jù)源,但需配置JDBC工作的環(huán)境變量。
1)將數(shù)據(jù)庫的JDBC驅(qū)動(dòng)加載到classpath中,在基于JSP的WEB應(yīng)用實(shí)際開發(fā)過程中,通常把目標(biāo)數(shù)據(jù)庫產(chǎn)品的JDBC驅(qū)動(dòng)復(fù)制到WEB-INF/lib下。
2)加載JDBC驅(qū)動(dòng),并將其注冊(cè)到DriverManager中。下面是一些主流數(shù)據(jù)庫的JDBC驅(qū)動(dòng)加裁注冊(cè)的代碼:
3)建立數(shù)據(jù)庫連接,取得Connection對(duì)象。程序代碼如下:
[1]鞏建學(xué).JSP中連接數(shù)據(jù)庫常用的方法 [J].電腦開發(fā)與應(yīng)用,2009,22(7):79.
[2]張洋.JDBC數(shù)據(jù)庫訪問技術(shù) [J].電腦編程技巧與維護(hù),2009(22):48.
[3]萬芳 .基于JSP技術(shù)中數(shù)據(jù)庫的開發(fā)應(yīng)用 [J]科技傳播,2009(12上):98-99.
[4]羅在文.JSP技術(shù)訪問SQL Server數(shù)據(jù)庫的設(shè)計(jì)與實(shí)現(xiàn) [J].長春理工大學(xué)學(xué)報(bào)(自然科學(xué)版),2010,33(3):145-148.
[5]向?qū)W哲.JSP程序設(shè)計(jì)教程 [M].北京:人民郵電出版社,2007.