《電子技術應用》
您所在的位置:首頁 > 其他 > 業(yè)界動態(tài) > JDBC在網(wǎng)絡編程中的應用

JDBC在網(wǎng)絡編程中的應用

2008-12-30
作者:瑪依拉.別克強塔伊夫,古麗米拉

1.JDBC簡介
隨著計算機網(wǎng)絡技術的發(fā)展且在它的推動下, Java語言現(xiàn)已成為一個流行的網(wǎng)絡編程" title="網(wǎng)絡編程">網(wǎng)絡編程語言,這不僅是由于Java獨有的面向?qū)ο蟆踩浴⒍嗑€程、平臺無關性等眾多的特點的,而且是因為Java有了JDBC,JDBC是Java技術最重要且最實用的部分之一,它為計算機網(wǎng)絡編程提供了強大的數(shù)據(jù)支持。JDBC即Java Database Connectivity,它實現(xiàn)了Java與數(shù)據(jù)庫的互連,它提供了一組標準的API(Application Programming Interface,應用程序設計" title="程序設計">程序設計接口)調(diào)用來進行對數(shù)據(jù)庫的訪問,也就是說JDBC API是Java程序設計語言中訪問數(shù)據(jù)的接口。有了JDBC就使Java的應用范圍擴展到了數(shù)據(jù)庫領域。在JDK以前的版本中,JDBC只是一個可選部件,到了JDK1.1公布時及其以后的版本中,SQL類包(也就是JDBC API)已成為Java語言的標準部件。JDBC由一組用Java編程語言" title="編程語言">編程語言寫的類和接口組成,它為數(shù)據(jù)庫應用開發(fā)人員、數(shù)據(jù)庫前臺工具開發(fā)人員提供了一種標準的應用程序設計接口,使開發(fā)人員可以很方便地將SQL語句傳送給幾乎任何一種數(shù)據(jù)庫。也就是說,開發(fā)人員可以不需要為了訪問Oracle、Sybase或Microsoft的SQLServer而寫3個不同的程序,而是只要寫一個程序就可訪問Oracle、Sybase或Microsoft的SQLServer。它力求達到的是Java應用如何同各種各樣的數(shù)據(jù)庫連接,而JDBC正是實現(xiàn)這種連接的關鍵。
2. 開發(fā)數(shù)據(jù)庫應用系統(tǒng)的模型
JDBC支持兩層應用模型及三層應用模型。在兩層應用模型中客戶端瀏覽器中運行的程序(例如:Java applet)可以直接與數(shù)據(jù)庫服務器相連,直接訪問此數(shù)據(jù)庫,如圖1所示。在兩層模型中,因為是程序直接同數(shù)據(jù)庫連接。這就需要能直接被訪問的數(shù)據(jù)庫進行連接的JDBC驅(qū)動器。用戶的SQL語句被傳送給數(shù)據(jù)庫,而這些語句執(zhí)行的結果將被傳回給用戶。在三層應用模型中客戶端瀏覽器中運行的程序不可以直接與數(shù)據(jù)庫服務器相連,不能直接訪后臺數(shù)據(jù)庫,而是在這兩者之間增加了一個中間Web服務器,如圖2所示。首先客戶機與中間服務器通信,由中間服務器處理客戶機的請求,其命令將被發(fā)送到中間Web服務器,而中間Web服務器將SQL語句發(fā)送到數(shù)據(jù)庫。數(shù)據(jù)庫處理SQL語句并將結果返回中間Web服務器,然后中間Web服務器將它們返回用戶。也就是說在三層應用模型中由中間服務器使用JDBC訪問數(shù)據(jù)庫。

3. JDBC的任務及JavaSQL包
??? JDBC能完成下列三件任務: ⑴同一個數(shù)據(jù)庫建立連接;⑵向數(shù)據(jù)庫發(fā)送SQL語句;⑶處理數(shù)據(jù)庫返回的結果,而完成這些任務,要使用到java.sql包中的一系列類(class)、接口(interface)、方法(method)。 實際上JDBC的是兩組面向應用程序和數(shù)據(jù)庫驅(qū)動程序開發(fā)人員的API,以及將前者向后者轉(zhuǎn)化的內(nèi)在封裝邏輯。這兩組API即:面向數(shù)據(jù)庫驅(qū)動程序開發(fā)人員的接口:JDBC Driver API和面向應用程序開發(fā)人員的接口JDBC API,前者是提供給數(shù)據(jù)庫管理系統(tǒng)" title="管理系統(tǒng)">管理系統(tǒng)的生產(chǎn)廠家的,一般的網(wǎng)頁編程開發(fā)人員不需要知道也可,而JDBC API有兩個包java.sql和javax.sql,這是Java核心框架的組成部分,網(wǎng)絡編程人員通過一定的規(guī)則調(diào)用這些包中的API,就可以能夠?qū)崿F(xiàn)對數(shù)據(jù)庫管理系統(tǒng)的訪問,開發(fā)各種動態(tài)網(wǎng)站系統(tǒng)。這個包中最重要的接口是:
??? ⑴java.sql.DriverManager: 用來加載" title="加載">加載不同的JDBC驅(qū)動程序,對于給定的每一個連接請求,它將會依次讓每一個驅(qū)動程序盡可能連接到目標URL上,為創(chuàng)建新的數(shù)據(jù)庫鏈接提供支持。
??? ⑵java.sql.Connection:完成對某一制定數(shù)據(jù)庫的連接功能。而連接是與給定數(shù)據(jù)庫的會話,當連接成功時,SQL才被執(zhí)行和返回結果。
??? ⑶java.sql.Statement:用來在一個已經(jīng)創(chuàng)建的連接中,執(zhí)行SQL語句并包含語句所產(chǎn)生的結果,即作為執(zhí)行SQL語句的容器。在執(zhí)行的任何時候,一個語句只能打開一個結果集。
??? ⑷java.sql.Result:代表特定SQL語句執(zhí)行后的數(shù)據(jù)庫結果集。
4. 通過JDBC訪問Web數(shù)據(jù)庫
??? 要通過JDBC訪問數(shù)據(jù)庫,可以分以下幾步完成
??? ⑴加載驅(qū)動程序:為了和的特定數(shù)據(jù)庫鏈接,JDBC首先必須加載相應的驅(qū)動程序,驅(qū)動程序可以使用最常用的JDBC-ODBC bridge驅(qū)動程序,其方法為使用Class.forName();方法,也可以使用JDBC到通用網(wǎng)絡協(xié)議的驅(qū)動程序;還可以使用由數(shù)據(jù)庫廠商提供的驅(qū)動程序,其加載方法都一樣要使用Class.forName()方法, 且在此方法的括號中填入驅(qū)動器名即可,例如使用JDBC-ODBC bridge驅(qū)動程序,程序代碼書寫格式為Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);,也可以在Class.forName()方法括號中填入一系列用冒號隔開的驅(qū)動器名,例如:Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver:oracle.jdbc.driver.OracleDriver”);,這時JDBC將按照表的順序搜索驅(qū)動程序,并使用第一個能成功地與給定的URL相連的驅(qū)動程序。
??? ⑵建立同數(shù)據(jù)庫的連接:DriverManager類中的方法getConnection用于建立于某個數(shù)據(jù)庫鏈接。在與較小型的數(shù)據(jù)庫例如Foxpro、Access連接時,只要指出數(shù)據(jù)源信息而不需要任何其他的附加條件,例如:
java.lang.String strCon = 'jdbc:odbc:st';
java.sql.Connection jsCon = java.sql.DriverManager.getConnection(strCon); 但在大型數(shù)據(jù)庫中建立連接時需要給出用戶名和密碼,其使用方法為:
Connection Con = java.sql.DriverManager.getConnection(String url,String user,String password);。
??? ⑶申請進行數(shù)據(jù)庫操作的對象:建立連接后,在實際的數(shù)據(jù)庫操作之前,要獲得操作數(shù)據(jù)庫的語句對象。其方法為,利用Con對象生成一個java.sql.Statement對象,此對象可以負責完成將SQL語句傳遞給數(shù)據(jù)庫管理系統(tǒng)執(zhí)行等任務。
??? ⑷進行數(shù)據(jù)庫操作:數(shù)據(jù)庫操作工作包括查詢表、更新表等,可以分別使用SQL SELECT、SQL UPDATE和SQL INSERT語句來完成。數(shù)據(jù)庫的查詢和修改操作分別通過executeQuery()和executeUpdate()方法實現(xiàn)。格式為:
java.sql.ResultSet jsRes = jsSta.executeQuery(strSQL);
??? ⑸對數(shù)據(jù)庫操作的結果進行處理:查詢操作返回的結果集要進行處理,例如:按照某種數(shù)據(jù)類型取出數(shù)據(jù)庫中某一列的值其程序代碼格式為:
int SID = jsRes.getInt(4);
String TName = jsRes.getString('WSTName');。
⑹關閉數(shù)據(jù)庫操作對象:數(shù)據(jù)庫操作結束后,要將數(shù)據(jù)庫操作結果集以及申請的語句對象和建立的數(shù)據(jù)庫鏈接關閉。其程序代碼為:
java.sql.Connection jsCon=null; //數(shù)據(jù)庫連接對象
java.sql.Statement jsSta=null; //SQL語句對象
java.sql.ResultSet jsRes=null; //結果集對象
… …
jsRes.close();//關閉結果集
jsSta.close();//關閉SQL語句對象
jsCon.close();//關閉數(shù)據(jù)庫??
5.實例
??? 數(shù)據(jù)庫連接是網(wǎng)絡編程的重要部分, Java程序就通過JDBC驅(qū)動程序與數(shù)據(jù)庫相連,執(zhí)行查詢、提取、插入數(shù)據(jù)等等操作。我完成的省級課題基于Java技術的通用考試系統(tǒng),采用Java JDBC技術對于數(shù)據(jù)庫進行連接,微軟公司Access2000數(shù)據(jù)庫系統(tǒng)為后臺數(shù)據(jù)庫,其數(shù)據(jù)庫中包含5個表:學生信息表USER:用于存放考生的信息,包括學號、考號、班級、姓名、交卷標記及考試成績等;考試科目分類表TMFL:用于存放課程信息,包括各課程的名稱及課程代碼等;試題信息表TMXX:用于存放各課程的試題,為了便于管理;答題表TATIB:用于存放所有考生的答題信息,包括學號、題號、答題信息等;答題目錄表TATIML等:用于管理答題結果。此系統(tǒng)中連接數(shù)據(jù)庫且獲得數(shù)據(jù)的關鍵代碼為:
… … … …
java.sql.Connection jsCon; //數(shù)據(jù)庫連接對象
java.sql.Statement jsSta; //SQL語句對象
java.sql.ResultSet jsRes; //結果集對象
java.lang.String strCon;??? //數(shù)據(jù)庫連接字符串
java.lang.String strSQL;??? //SQL語句
int RCount=0;
int CIndex=0;
int Len=0;
double i=0;
int j=0;
… … … …
Class.forName('sun.jdbc.odbc.JdbcOdbcDriver');//裝載JDBC驅(qū)動程序
strCon = 'jdbc:odbc:st';//設置數(shù)據(jù)庫連接字符串
jsCon = java.sql.DriverManager.getConnection(strCon); //連接數(shù)據(jù)庫
jsSta = jsCon.createStatement();//創(chuàng)建一個可以滾動的只讀的SQL語句對象
… … … …
strSQL = 'select WSTName,DSTName,STDD,STID,keID from TMXX where STID='+j ; //準備SQL語句
//執(zhí)行SQL語句并獲取結果集
jsRes = jsSta.executeQuery(strSQL);
while( jsRes.next()){?
int SID = jsRes.getInt(2);
String? STDD = jsRes.getString('STDD');
String? TName = jsRes.getString('WSTName');
String DSTN=jsRes.getString('DSTName');
…? …? …? … }
jsRes.close();//關閉結果集
jsSta.close();//關閉SQL語句對象
jsCon.close();//關閉數(shù)據(jù)庫??
… … … …}

??? 基于Java技術的通用考試系統(tǒng),從數(shù)據(jù)庫中獲得數(shù)據(jù)且顯示題目的界面如圖3所示。

??
參考文獻
[1] 王克宏.Java語言SQL接口[M].北京:清華大學出版社,1997.
[2] 雨陽隆春.深入JSP網(wǎng)絡編程[M]. 北京:清華大學出版社,2001.
[3] 路新春,劉國玲.JSP應用中的信息共享與傳遞技術[J].計算機應用,2003,(3)

基金項目:新疆自治區(qū)少數(shù)民族科技骨干人才特殊培養(yǎng)科研專項資金項目(2001—5)

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權者。如涉及作品內(nèi)容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
国产精品三级视频| 国产精品乱码妇女bbbb| 亚洲一区二区三区免费在线观看 | 9i看片成人免费高清| 韩国亚洲精品| 国产精品视频久久一区| 国产精品v片在线观看不卡| 欧美激情国产高清| 美女日韩欧美| 久久综合成人精品亚洲另类欧美| 欧美制服丝袜| 欧美一区二区视频97| 亚洲一区二区三区中文字幕| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲国产精品www| 欧美亚洲网站| 亚洲欧美日韩精品久久亚洲区 | 影音先锋日韩资源| 国内精品视频在线观看| 国内一区二区三区| 一区二区视频免费在线观看| 在线成人黄色| 亚洲国产影院| 99精品热视频| 亚洲一区二区三区乱码aⅴ| 亚洲天堂久久| 亚洲欧美日韩爽爽影院| 午夜精品久久99蜜桃的功能介绍| 亚洲欧美日韩视频二区| 欧美在线视屏| 亚洲人成人一区二区在线观看| 亚洲欧洲视频在线| avtt综合网| 亚洲——在线| 欧美亚洲一区二区在线| 香蕉免费一区二区三区在线观看 | 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 国产精品jvid在线观看蜜臀| 欧美日韩精品免费| 欧美理论在线| 欧美精品一区二| 欧美区在线播放| 欧美激情亚洲自拍| 牛人盗摄一区二区三区视频| 免费在线看成人av| 美女啪啪无遮挡免费久久网站| 看欧美日韩国产| 免费观看成人网| 欧美国产激情二区三区| 欧美激情精品久久久久久变态| 欧美~级网站不卡| 欧美精品成人| 欧美日韩亚洲视频| 欧美四级电影网站| 国产精品区二区三区日本| 国产精品亚洲产品| 国产美女精品视频| 韩国成人精品a∨在线观看| 精品91在线| 亚洲高清不卡在线| 亚洲精品综合久久中文字幕| 亚洲美女av黄| 亚洲视频第一页| 亚洲国产精品国自产拍av秋霞| 亚洲欧洲日产国产网站| 99国产精品99久久久久久| 亚洲一区在线看| 欧美亚洲视频在线观看| 久久免费精品视频| 蜜臀a∨国产成人精品| 欧美激情精品久久久久久| 欧美午夜不卡| 国产一区二区你懂的| 亚洲国产婷婷香蕉久久久久久99| 99re国产精品| 欧美一区二区私人影院日本| 91久久嫩草影院一区二区| 一区二区高清在线| 欧美一区影院| 欧美1区免费| 国产精品美女www爽爽爽| 黄色精品在线看| 99在线|亚洲一区二区| 亚洲欧美中文字幕| 亚洲精品女人| 亚欧美中日韩视频| 欧美成人中文字幕| 国产精品卡一卡二卡三| 黄色精品在线看| 一区二区三区久久精品| 欧美在线看片| 一本色道久久加勒比精品| 性欧美8khd高清极品| 欧美xxx在线观看| 国产精品素人视频| …久久精品99久久香蕉国产| 一本大道久久a久久精品综合 | 午夜亚洲视频| 亚洲调教视频在线观看| 久久久久国产精品一区三寸| 欧美日韩国产区一| 国产欧美一区二区精品性色| 一本一本a久久| 亚洲国产网站| 欧美一区二区三区免费观看视频| 欧美丰满少妇xxxbbb| 国产欧美日本| 99国产精品| 亚洲国产清纯| 欧美一区观看| 欧美三区美女| 亚洲高清三级视频| 性欧美8khd高清极品| 一区二区三区四区国产精品| 久久亚洲一区二区三区四区| 国产精品久久毛片a| 亚洲激情av| 亚洲高清色综合| 欧美在线二区| 欧美日韩一区二区在线播放| 亚洲成在线观看| 久久福利影视| 久久成人av少妇免费| 欧美特黄一区| 亚洲日本va午夜在线电影| 久久精品国产96久久久香蕉| 欧美一区二区三区在线观看| 欧美体内she精视频在线观看| 亚洲黄一区二区| 亚洲欧洲日本专区| 两个人的视频www国产精品| 国产欧美日韩中文字幕在线| 一本一本久久a久久精品综合麻豆| 亚洲精品国产精品乱码不99| 久久亚洲风情| 国产在线麻豆精品观看| 日韩视频专区| 亚洲精品一区二区在线观看| 亚洲人www| 欧美+日本+国产+在线a∨观看| 一区在线电影| 亚洲第一搞黄网站| 久久婷婷综合激情| 国产在线一区二区三区四区 | 亚洲精品免费网站| 久久久久久日产精品| 国产主播喷水一区二区| 欧美一区二区三区久久精品茉莉花| 性高湖久久久久久久久| 国产精品日韩| 亚洲在线视频观看| 午夜精品久久久久久久99热浪潮| 欧美日韩视频在线一区二区观看视频 | 亚洲视频视频在线| 欧美少妇一区二区| 一本大道av伊人久久综合| 一区二区三区精品视频在线观看| 欧美国产精品专区| 91久久夜色精品国产九色| 亚洲一区二区三区四区中文| 国产精品久久7| 亚洲一区二区三区在线| 欧美在线视频不卡| 国内成+人亚洲| 最新国产拍偷乱拍精品| 欧美va亚洲va香蕉在线| 亚洲精品久久久久久下一站| 亚洲午夜精品久久久久久浪潮| 欧美网站在线| 午夜国产欧美理论在线播放| 久久久精品性| 红杏aⅴ成人免费视频| 一区二区三区国产盗摄| 久久精品一区四区| 在线成人av.com| 一区二区高清| 国产欧美精品一区二区色综合| 欧美一级片久久久久久久| 久久婷婷久久| 亚洲理伦电影| 亚洲欧美综合v| 国语自产精品视频在线看抢先版结局| 最新国产乱人伦偷精品免费网站| 欧美另类视频在线| 亚洲影院一区| 美女性感视频久久久| 91久久香蕉国产日韩欧美9色| 欧美一级欧美一级在线播放| 黄色成人在线网址| 99精品国产福利在线观看免费 | 国产日本欧美一区二区三区在线| 欧美一级黄色网| 欧美日本国产| 亚欧美中日韩视频| 欧美福利视频在线| 中文在线一区| 欧美在线free| 亚洲肉体裸体xxxx137| 午夜精品www| 亚洲国产精品久久|