jsp+sql智能道路交通信息管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)(論文+系統(tǒng)+開(kāi)題報(bào)告+答辯PPT+外文翻譯
畢業(yè)設(shè)計(jì)(論文)
附
件
目?錄
任務(wù)書(shū)1
文獻(xiàn)綜述4
開(kāi)題報(bào)告9
譯文14
譯文原文
附件A
畢業(yè)設(shè)計(jì)(論文)
任?務(wù)?書(shū)
設(shè)計(jì)(論文)題目 智能道路交通信息管理系統(tǒng)
學(xué) 院 計(jì)算機(jī)學(xué)院
專 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù)
學(xué) 生 姓 名
指導(dǎo)教師姓名、職稱
助理指導(dǎo)教師姓名、職稱
下 發(fā) 日 期 20 年 月 日
教 務(wù) 處
設(shè)計(jì)(論文)的主要內(nèi)容與要求:智能道路交通信息管理系統(tǒng)通過(guò)對(duì)電子警察系統(tǒng)抓拍到的違章車輛的圖像信息進(jìn)行有效管理,達(dá)到懲戒違章司機(jī),改善交通路口混亂,減少因交通違章造成的人為塞車和事故,提高交通執(zhí)法的準(zhǔn)確性和效率,節(jié)省警力并提高城市道路交通效率的目的。本系統(tǒng)包括四部分功能:(1)違章車輛圖像信息的錄入;(2)違章車輛信息的查詢統(tǒng)計(jì);(3)違章車輛信息的公告與處罰;(4)信息管理系統(tǒng)的維護(hù)與設(shè)置。設(shè)計(jì)(論文)的主要技術(shù)指標(biāo):1、實(shí)現(xiàn)違章圖像的網(wǎng)絡(luò)訪問(wèn)并將相應(yīng)信息錄入數(shù)據(jù)庫(kù);2、實(shí)現(xiàn)違章圖像及信息的網(wǎng)絡(luò)查詢及信息統(tǒng)計(jì);3、實(shí)現(xiàn)違章車輛信息的網(wǎng)絡(luò)公告并對(duì)違章司機(jī)作出處罰;3、實(shí)現(xiàn)本信息管理系統(tǒng)的維護(hù)與設(shè)置。進(jìn) 度 安 排序號(hào)設(shè)計(jì)(論文)工作進(jìn)度日期(起止周數(shù))1查閱資料第1,2周2完成文獻(xiàn)綜述和開(kāi)題報(bào)告第3周3熟悉開(kāi)發(fā)環(huán)境第4-5周4系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)第6-13周5程序調(diào)試與測(cè)試第14-15周6撰寫(xiě)論文,準(zhǔn)備答辯第16周78主要參考文獻(xiàn):[1] 丁寶康、董健全編著 數(shù)據(jù)庫(kù)使用教程 清華大學(xué)出版社 2003[2] 丁愛(ài)萍編著 數(shù)據(jù)庫(kù)技術(shù)及應(yīng)用 西安電子科技大學(xué)出版社 2005[3] DATE C J. An Introduction to Database Systems. Vol. I, Addison-Wesley ,Version 6, 1995[4] 謝希人編著 計(jì)算機(jī)網(wǎng)絡(luò)(第2版) 電子工業(yè)出版社 1999[5] 李勁、謝兆陽(yáng),SQL Server 2000數(shù)據(jù)庫(kù)設(shè)計(jì)與系統(tǒng)管理 清華大學(xué)出版社 2001 [6] 飛思科技產(chǎn)品研發(fā)中心編著 JSP應(yīng)用開(kāi)發(fā)祥解 電子工業(yè)出版社 2005[7] 施安平等譯 JAVA程序設(shè)計(jì)教程(第5版) 清華大學(xué)出版社 2005同組設(shè)計(jì)(論文)者:系負(fù)責(zé)人意見(jiàn):簽字: 年 月 日學(xué)院負(fù)責(zé)人意見(jiàn):簽字: 年 月 日學(xué)生簽字:接受任務(wù)時(shí)間: 年 月 日
注:任務(wù)書(shū)由指導(dǎo)教師填寫(xiě)。
附件B
畢業(yè)設(shè)計(jì)(論文)
文獻(xiàn)綜述
題 目 電子警察系統(tǒng)的發(fā)展現(xiàn)狀
學(xué)生姓名 學(xué)號(hào)
指導(dǎo)教師評(píng)語(yǔ):
指導(dǎo)教師評(píng)定成績(jī) 簽字:
交叉評(píng)閱教師評(píng)語(yǔ):
交叉評(píng)閱教師評(píng)定成績(jī) 簽字:
教 務(wù) 處
文獻(xiàn)綜述:
電子警察系統(tǒng)的發(fā)展現(xiàn)狀
1摘要
電子警察是“智能電子警察監(jiān)測(cè)系統(tǒng)”的簡(jiǎn)稱,它是一套高科技電子設(shè)備,最初是為維護(hù)交通執(zhí)法提供了一種先進(jìn)手段。以往許多城市在某些交通場(chǎng)合,由于沒(méi)有有效的執(zhí)法手段造成執(zhí)法困難,例如:無(wú)人值守的路口;單行線;禁行、限時(shí)道路;限車型車道;主、輔路進(jìn)出口;緊急停車帶;公交專用道;違章超速等場(chǎng)合檢查執(zhí)法困難,特別是在夜間,違章行車現(xiàn)象經(jīng)常發(fā)生,嚴(yán)重破壞了交通秩序。該設(shè)備能夠?qū)?違章車輛進(jìn)行自動(dòng)判斷與圖像記錄。執(zhí)法部門(mén)可以根據(jù)該系統(tǒng)所提供的車輛違章過(guò)程的圖像記錄,對(duì)違章 司機(jī)進(jìn)行追究和處罰。幾年來(lái),各大中城市均在此方面做過(guò)有益的嘗試,但使用情況總的來(lái)并不理想。主要原因是現(xiàn)有的電子警察抓拍設(shè)備存在許多缺陷,限制了它發(fā)揮更大的作用。從目前市場(chǎng)情況來(lái)看,還沒(méi)有哪一家公司提供的系統(tǒng)和設(shè)備能夠真正滿足用戶期望,用戶對(duì)系統(tǒng)現(xiàn)狀也看法各異。電子警察設(shè)備具有非常廣闊的前景,但現(xiàn)階段在設(shè)備選型方面卻難度很大。
本系統(tǒng)是作為電子警察的后臺(tái)數(shù)據(jù)處理系統(tǒng)的“車輛違章處罰系統(tǒng)”。要求能實(shí)現(xiàn)交通主管部門(mén)的網(wǎng)上辦公功能,通過(guò)對(duì)電子監(jiān)控得到的數(shù)據(jù)進(jìn)行錄入,處理,查詢,公告,處罰等,實(shí)現(xiàn)對(duì)違章車輛的紀(jì)錄,處罰。因而,其在現(xiàn)代交通管理中有很大的發(fā)展空間。即使它在數(shù)據(jù)的采集,處理上還要求人工處理,但它還是比以前全人工的方式要優(yōu)異得多??梢韵胂箅S著科學(xué)技術(shù)的發(fā)展,相信在不久就能在數(shù)據(jù)采集與處理上實(shí)現(xiàn)不同系統(tǒng)之間的數(shù)據(jù)傳遞,以及數(shù)據(jù)處理。
2關(guān)鍵字
電子警察,智能交通,違章處罰,電子監(jiān)控
3正文
3.1電子警察的組成
典型的“電子警察”通常是由圖像檢測(cè)(車輛感應(yīng))、拍攝、采集、處理、傳輸與管理以及輔助光源、輔助支架和相關(guān)配套設(shè)備等幾個(gè)部分組成。主要有固定和流動(dòng)的兩種應(yīng)用型式,自動(dòng)和人工操作的兩種工作方式。下面分別就各組成部分作一一介紹:
1、圖像檢測(cè)部分:在系統(tǒng)中起車輛感應(yīng)的作用,主要有:(1)環(huán)形線圈檢測(cè)器,(2)視頻檢測(cè)器;(3)超聲波或微波(雷達(dá)波)檢測(cè)器;(4)紅外線檢測(cè)器等幾種。
2、圖像拍攝部分:在系統(tǒng)中起圖像抓拍的作用,主要有照相機(jī)和攝像機(jī)。其中照相機(jī)目前基本上多采用數(shù)碼照相機(jī),極少使用傳統(tǒng)的膠片式照相機(jī)(繁鎖、后期使用成本高、實(shí)時(shí)性差)。而數(shù)碼照相機(jī)多選用三百萬(wàn)以上像素、可變焦、自動(dòng)光圈及白平衡調(diào)整等的準(zhǔn)專業(yè)相機(jī)。不過(guò),由于其結(jié)構(gòu)、圖像存取等原因,其實(shí)時(shí)性、連拍續(xù)傳能力和環(huán)境適應(yīng)性較差,一般多用于交叉路口的闖紅燈車輛抓拍(需特制機(jī)箱,進(jìn)行溫度調(diào)控等)和人工流動(dòng)拍攝等場(chǎng)合;而攝像機(jī)基本上都選用高清晰度(≥480TVL)、低照度(≤0.1lux)、高信噪比、動(dòng)態(tài)抗逆光與強(qiáng)光抑制、背景光自動(dòng)補(bǔ)償、白平衡自動(dòng)調(diào)整等功能的快速(快門(mén)速度不能慢于1/1000秒)工業(yè)級(jí)攝像機(jī),其配套的鏡頭則應(yīng)采用大孔徑、可變焦,大光圈、快速自動(dòng)光圈調(diào)整的專業(yè)光學(xué)鏡頭。
3、圖像采集部分:在系統(tǒng)中起圖像采集即將模擬視頻圖像數(shù)字化的作用,通常采用多路視頻圖像采集卡:將多路模擬視頻圖像經(jīng)過(guò)多路切換器、A/D變換器以及裁剪、壓縮編碼后變成數(shù)字視頻信息。國(guó)際上通常采用的視頻壓縮編碼方式有:MJPEG、Wavelet(小波變換),MPEG-1(如VCD),MPEG-2(如DVD)和MPEG-4等幾種。國(guó)內(nèi)數(shù)字化視頻監(jiān)控工程中常用的是具有壓縮率高、系統(tǒng)資源總幀數(shù)大、傳輸速率要求低、單卡可支持多路視頻壓縮的MJPEG和MPEG-4兩種視頻壓縮編碼方式。圖像采集的優(yōu)劣直接關(guān)系到系統(tǒng)的工作效能、圖像質(zhì)量和進(jìn)一步處理、利用的成效大小。
4、圖像處理部分:事實(shí)上,應(yīng)包括控制主機(jī)和系統(tǒng)應(yīng)用軟件兩個(gè)部分,在系統(tǒng)中起控制、圖像識(shí)別、存貯與管理的作用。為了保證系統(tǒng)在惡劣工作環(huán)境中連續(xù)不間斷地自動(dòng)運(yùn)行,控制主機(jī)必須采用高速、大內(nèi)存、大容量鏡像硬盤(pán)等高性能工業(yè)級(jí)控制機(jī)或DSP處理機(jī),以滿足多路圖像(包括全景和近景特寫(xiě)圖像)的捕捉、識(shí)別、壓縮、存貯、比對(duì)、報(bào)警、傳輸和故障自診斷與管理等實(shí)時(shí)多任務(wù)、多進(jìn)程的操作要求,同時(shí)尚需預(yù)留有適宜的擴(kuò)展與升級(jí)余地;而系統(tǒng)應(yīng)用軟件通常包括Windows或Linux或Unix操作系統(tǒng)、圖像模糊識(shí)別與信息管理軟件。圖像模糊識(shí)別主要是車牌識(shí)別軟件一般包括圖像二值轉(zhuǎn)換,圖像差分、濾波與平滑,車牌定位與旋轉(zhuǎn),字符切割,字符識(shí)別,車牌顏色提取與識(shí)別和車牌分類等功能模塊??刂浦鳈C(jī)的配置和操作系統(tǒng)合適與否直接決定了系統(tǒng)的性能、穩(wěn)定性與可靠性的好壞。圖像識(shí)別率的高低則幾乎決定了系統(tǒng)技術(shù)水平和智能化程度的高低。
5、信息傳輸部分:包括本地和遠(yuǎn)程傳輸兩個(gè)部分,在系統(tǒng)中起信息傳遞與交換的作用。本地信息傳輸部分主要包括檢測(cè)信號(hào)線、視頻信號(hào)線、網(wǎng)絡(luò)信號(hào)線,網(wǎng)卡以及交換機(jī)或集線器等,其是確保系統(tǒng)正常工作的“中樞神經(jīng)”;而遠(yuǎn)程信息傳輸部分則主要要有線和無(wú)線介質(zhì)兩種,其是實(shí)現(xiàn)系統(tǒng)遠(yuǎn)程監(jiān)控,遠(yuǎn)程維護(hù)與遠(yuǎn)程報(bào)警以及信息共享與綜合利用的基本保障。
6、信息管理部分:包括中心主機(jī)和管理軟件兩部分,在系統(tǒng)中起信息的匯集、存貯、查詢、統(tǒng)計(jì)、交換、備份、打印、嫌疑信息(如交通違章或事故逾期未處理、逾期未參加法定檢驗(yàn)或?qū)忩?yàn),被盜搶和肇事逃逸等車輛信息)的自動(dòng)比對(duì)與實(shí)時(shí)報(bào)警、系統(tǒng)故障自診斷與管理和遠(yuǎn)程監(jiān)控、遠(yuǎn)程維護(hù)與遠(yuǎn)程報(bào)警等諸多重要作用。信息管理部分是實(shí)現(xiàn)系統(tǒng)“實(shí)時(shí)監(jiān)視、聯(lián)網(wǎng)布控、自動(dòng)報(bào)警、快速反應(yīng)、科學(xué)高效、信息共享,監(jiān)控、威懾、防范和打擊并重”綜合效能,體現(xiàn)系統(tǒng)戰(zhàn)斗力的關(guān)鍵所在。
7、輔助光源:在系統(tǒng)中起輔助照明尤其是夜間或光線不足時(shí)補(bǔ)光,提高抓拍圖像清晰度的作用。通常有:(1)頻閃照明燈,如閃光燈:(2)連續(xù)照明燈,如路燈和其他冷、熱光源(常見(jiàn)的有白熾燈、螢光燈、鹵鎢燈、陶瓷金鹵燈,高壓鈉燈等多種)。輔助光源是確保系統(tǒng)在光線不足條件下正常工作的“夜明燈”,不可或缺。
8、輔助支架:在系統(tǒng)中用于安裝、固定攝像機(jī)或照相機(jī)和輔助光源等。常見(jiàn)的有:(1)龍門(mén)架;(2)懸臂架,如L或F型;(3)立柱;(4)移動(dòng)式安裝支架,如三角架和固定在汽車上專用支架等。輔助支架是系統(tǒng)正常工作,持續(xù)運(yùn)行的基礎(chǔ),不可忽視。
9、其他相關(guān)配套設(shè)備:在系統(tǒng)中主要起保證系統(tǒng)相關(guān)設(shè)備正常、穩(wěn)定、可靠地通行的作用。常用的有:(1)長(zhǎng)延時(shí)不間斷電源(UPS),(2)凈化穩(wěn)壓電源;(3)強(qiáng)、弱電防雷、設(shè)備避雷與接地裝置;(4)系統(tǒng)故障、違章或嫌疑信息和防盜等報(bào)警裝置;(5)打印機(jī)等等。
3.2主要功能
環(huán)形線圈和視頻檢測(cè)器復(fù)合檢測(cè)、圖像融合(拼接)與后期處理(濾波,平滑等優(yōu)化處理和亮度/對(duì)比度/色彩/銳化調(diào)整等)和邊界觸發(fā)報(bào)警功能,可全天候、不間斷地對(duì)所有通過(guò)拍攝點(diǎn)的車輛(含違章、嫌疑車輛等)進(jìn)行自動(dòng)拍攝,且只有當(dāng)車輛通過(guò)時(shí)才拍攝;
準(zhǔn)確地記錄并存貯車輛(全景和近景即車頭或車尾部位特寫(xiě)),車牌、速度、流量、日期、時(shí)間、地點(diǎn)和行駛方向等信息,能夠自動(dòng)識(shí)別車輛類型(大、小、客,貨四類)、車身顏色、車牌(含漢字、字母,數(shù)字和車牌顏色),實(shí)現(xiàn)車輛超速、超車,逆行、不按道行駛、跨越雙實(shí)線、闖紅燈、禁停、禁行、禁彎等動(dòng)、靜態(tài)交通違章車輛抓拍,嫌疑車輛及車牌信息自動(dòng)比對(duì)與實(shí)時(shí)報(bào)警功能;
各功能模塊(包括運(yùn)行參數(shù)等)可根據(jù)實(shí)際需要進(jìn)行靈活配置與管理。漢化界面、簡(jiǎn)單直觀、操作維護(hù)方便。能夠按照車型、車身顏色、車牌、速度、流量、日期、時(shí)間、地點(diǎn)、行駛方向和違章類別等相關(guān)條件進(jìn)行單一或組合方式的信息查詢、統(tǒng)計(jì)、傳遞與打印等;
可存貯不少于80萬(wàn)輛汽車圖像信息,實(shí)現(xiàn)全自動(dòng)刷新,循環(huán)存儲(chǔ)。能夠進(jìn)行多任務(wù)操作,監(jiān)控、查詢、統(tǒng)計(jì)、傳遞與打印等互不影響;
完善的系統(tǒng)管理(包括用戶權(quán)限管理、黑客與病毒防治、各功能模塊及其電源的故障自診斷與自動(dòng)報(bào)警——含防盜報(bào)警等,各種報(bào)警的提示方式應(yīng)有明顯區(qū)別)和遠(yuǎn)程監(jiān)控、遠(yuǎn)程維護(hù)與遠(yuǎn)程報(bào)警等功能。
關(guān)鍵指標(biāo):(1)最高拍攝車速:≥160km/h;(2)車輛抓拍率:≥98%;(3)車牌抓拍率:≥90%:車牌識(shí)別率:≥80%。
4結(jié)語(yǔ)
隨著科技的不斷發(fā)展,道路監(jiān)控手段也在不斷地提高,電子警察的性能與圖像拍攝、傳輸也在不斷發(fā)展。電子警察就可以實(shí)現(xiàn)信號(hào)燈無(wú)線發(fā)射采集控制、圖像自動(dòng)下載,無(wú)線傳輸、系統(tǒng)自停自恢復(fù)自啟動(dòng)、遠(yuǎn)程無(wú)線監(jiān)控電子警察工作狀態(tài)等功能,這必將大大提高交通管理部門(mén)對(duì)交通的管理。
參考文獻(xiàn)
[1] 李巨偉等著.北京交通違章監(jiān)測(cè)非現(xiàn)場(chǎng)處罰數(shù)據(jù)庫(kù)管理系統(tǒng)簡(jiǎn)介.
[2] 黃曉丹著.廣州市電子警察拍攝系統(tǒng)及其應(yīng)用.
[3] 謝希人編著.計(jì)算機(jī)網(wǎng)絡(luò)(第2版).電子工業(yè)出版社
[4] 飛思科技產(chǎn)品研發(fā).JSP應(yīng)用開(kāi)發(fā)詳解(第二版).電子工業(yè)出版社.
[5] 龍馬工作室編著.DREAMWEAVER MX2004 & JSP 動(dòng)態(tài)網(wǎng)頁(yè)編程完全自學(xué)手冊(cè).人民郵電出版社.
[6] 賽奎春著.JSP工程應(yīng)用與項(xiàng)目實(shí)踐.機(jī)械工業(yè)出版社.
[7] 黃明等著.JSP信息系統(tǒng)設(shè)計(jì)與開(kāi)發(fā)實(shí)例.機(jī)械工業(yè)出版社.
[8] 劉曉華,陳亞強(qiáng)著.J2EE應(yīng)用開(kāi)發(fā)詳解.電子工業(yè)出版社.
[9] 王能斌著.?dāng)?shù)據(jù)庫(kù)管理系統(tǒng).中國(guó)水利水電出版社.
[10] 李勁,謝兆陽(yáng)著.SQL Server 2000數(shù)據(jù)庫(kù)設(shè)計(jì)與系統(tǒng)管理.清華大學(xué)出版社.
[11] 葉核亞,陳立等著.JAVA2程序設(shè)計(jì)實(shí)用教程.電子工業(yè)出版社.
[12] 馬云峰等著.IC卡交通違章處罰管理系統(tǒng).
[13] 張春銳著.IC卡在交通管理中的應(yīng)用.
附件C:
畢業(yè)設(shè)計(jì)(論文)
開(kāi)?題?報(bào)?告
設(shè)計(jì)(論文)題目 智能道路交通信息管理系統(tǒng)
學(xué) 院 計(jì)算機(jī)學(xué)院
專 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù)
學(xué) 生 姓 名 學(xué) 號(hào)
指導(dǎo)教師姓名、職稱
助理指導(dǎo)教師姓名、職稱
完 成 日 期 20 年 月 日
教 務(wù) 處
1、課題的目的及意義(含國(guó)內(nèi)外的研究現(xiàn)狀分析)電子警察是“智能電子警察監(jiān)測(cè)系統(tǒng)”的簡(jiǎn)稱,它是一套高科技電子設(shè)備,最初是為維護(hù)交通執(zhí)法提供了一種先進(jìn)手段。以往許多城市在某些交通場(chǎng)合,由于沒(méi)有有效的執(zhí)法手段造成執(zhí)法困難,例如:無(wú)人值守的路口;單行線;禁行、限時(shí)道路;限車型車道;主、輔路進(jìn)出口;緊急停車帶;公交專用道;違章 超速等場(chǎng)合檢查執(zhí)法困難,特別是在夜間,違章行車現(xiàn)象經(jīng)常發(fā)生,嚴(yán)重破壞了交通秩序。該設(shè)備能夠?qū)`章車輛進(jìn)行自動(dòng)判斷與圖像記錄。執(zhí)法部門(mén)可以根據(jù)該系統(tǒng)所提供的車輛違章過(guò)程的圖像記錄,對(duì)違章司機(jī)進(jìn)行追究和處罰。幾年來(lái),各大中城市均在此方面做過(guò)有益的嘗試,但使用情況總的來(lái)并不理想。主要原因是現(xiàn)有的電子警察抓拍設(shè)備存在許多缺陷,限制了它發(fā)揮更大的作用。從目前市場(chǎng)情況來(lái)看,還沒(méi)有哪一家公司提供的系統(tǒng)和設(shè)備能夠真正滿足用戶期望,用戶對(duì)系統(tǒng)現(xiàn)狀也看法各異。電子警察設(shè)備具有非常廣闊的前景,但現(xiàn)階段在設(shè)備選型方面卻難度很大??偨Y(jié)近年的實(shí)踐經(jīng)驗(yàn),提出以下看法,只有在這幾方面得到突破,才可能真正實(shí)現(xiàn)完善的電子警察系統(tǒng)。1)抓拍單元是具備200萬(wàn)以上像素的工業(yè)標(biāo)準(zhǔn)數(shù)碼相機(jī)。具備良好的軟件控制能力,并開(kāi)放協(xié)議。2)采用工業(yè)級(jí)器件,具有良好的全天候工作能力,長(zhǎng)期運(yùn)行穩(wěn)定可靠。3)系統(tǒng)采用嵌入式軟硬件平臺(tái),以保證良好的穩(wěn)定性。4)配置以太網(wǎng)通訊接口,支持遠(yuǎn)程文件傳送協(xié)議。5)采用硬盤(pán)或存儲(chǔ)卡在本地保存圖片。6)信息管理部分:包括中心主機(jī)和管理軟件兩部分,在系統(tǒng)中起信息的匯集、存貯、查詢、統(tǒng)計(jì)、交換、備份、打印、嫌疑信息(如交通違章或事故逾期未處理、逾期未參加法定檢驗(yàn)或?qū)忩?yàn),被盜搶和肇事逃逸等車輛信息)的自動(dòng)比對(duì)與實(shí)時(shí)報(bào)警、系統(tǒng)故障自診斷與管理和遠(yuǎn)程監(jiān)控、遠(yuǎn)程維護(hù)與遠(yuǎn)程報(bào)警等諸多重要作用。其作為服務(wù)器的主機(jī)通常要選用高性能(最好是雙CPU)工業(yè)級(jí)控制機(jī)或PC服務(wù)器;而管理軟件部分則多是建立在Oracle或MS SQL Server或Sybase等大型數(shù)據(jù)庫(kù)基礎(chǔ)之上的系統(tǒng)綜合管理與應(yīng)用軟件。信息管理部分是實(shí)現(xiàn)系統(tǒng)“實(shí)時(shí)監(jiān)視、聯(lián)網(wǎng)布控、自動(dòng)報(bào)警、快速反應(yīng)、科學(xué)高效、信息共享,監(jiān)控、威懾、防范和打擊并重”綜合效能,體現(xiàn)系統(tǒng)戰(zhàn)斗力的關(guān)鍵所在。因此,開(kāi)發(fā)出一套優(yōu)化的電子警察系統(tǒng),以及針對(duì)不同用戶的需要,對(duì)違章圖像進(jìn)行管理和查詢軟件,能夠提高交通部門(mén)工作效率,在一定程度上保障交通安全,減少交通隱患。將要開(kāi)發(fā)的系統(tǒng)是作為電子警察的后臺(tái)數(shù)據(jù)處理系統(tǒng)的“車輛違章處罰系統(tǒng)”。要求能實(shí)現(xiàn)交通主管部門(mén)的網(wǎng)上辦公功能,通過(guò)對(duì)電子監(jiān)控得到的數(shù)據(jù)進(jìn)行錄入,處理,查詢,公告,處罰等,實(shí)現(xiàn)對(duì)違章車輛的紀(jì)錄,處罰。因而,其在現(xiàn)代交通管理中有很大的發(fā)展空間。即使它在數(shù)據(jù)的采集,處理上還要求人工處理,但它還是比以前全人工的方式要優(yōu)異得多??梢韵胂箅S著科學(xué)技術(shù)的發(fā)展,相信在不久就能在數(shù)據(jù)采集與處理上實(shí)現(xiàn)不同系統(tǒng)之間的數(shù)據(jù)傳遞,以及數(shù)據(jù)處理。2、課題任務(wù)、重點(diǎn)研究?jī)?nèi)容、實(shí)現(xiàn)途徑智能道路交通信息管理系統(tǒng)通過(guò)對(duì)電子警察系統(tǒng)抓拍到的違章車輛的圖像信息進(jìn)行有效管理,達(dá)到懲戒違章司機(jī),改善交通路口混亂,減少因交通違章造成的人為塞車和事故,提高交通執(zhí)法的準(zhǔn)確性和效率,節(jié)省警力并提高城市道路交通效率的目的。本系統(tǒng)包括四部分功能:1)違章車輛圖像信息的錄入;2)違章車輛信息的查詢統(tǒng)計(jì);3)違章車輛信息的公告與處罰;4)信息管理系統(tǒng)的維護(hù)與設(shè)置。充分理解課題內(nèi)容及意義,掌握違規(guī)圖像采集原理及方法,熟練應(yīng)用JSP、SQL Server 2000等知識(shí)建立一套基于WEB的違章處罰管理系統(tǒng),具備對(duì)違章圖像的錄入、存儲(chǔ)、公告、處理,以及多種查詢方式,公告,處罰和員工管理,權(quán)限設(shè)置等功能。重點(diǎn)研究?jī)?nèi)容:數(shù)據(jù)庫(kù)的管理,WEB技術(shù),圖像存儲(chǔ),圖片的傳輸,違章信息的錄入、違章處罰、公告、信息統(tǒng)計(jì)、權(quán)限設(shè)置;這其中還包括了處罰決定書(shū)的打印、信息統(tǒng)計(jì)結(jié)果表的打印以及用戶權(quán)限的實(shí)現(xiàn)方式,數(shù)據(jù)庫(kù)的同步的細(xì)節(jié)性的問(wèn)題值得仔細(xì)考慮。實(shí)現(xiàn)途徑:按照軟件工程的分析、設(shè)計(jì)方法和過(guò)程,應(yīng)用數(shù)據(jù)庫(kù)相關(guān)理論,運(yùn)用JSP和JDBC和JavaBean技術(shù),以SQLserver2000數(shù)據(jù)庫(kù)管理系統(tǒng)為后臺(tái)數(shù)據(jù)庫(kù)支持來(lái)實(shí)現(xiàn)智能道路交通信息管理系統(tǒng):本系統(tǒng)的設(shè)計(jì)采用模塊化的設(shè)計(jì)方法,將系統(tǒng)分為違章信息的錄入、違章信息公告、違章信息處罰、信息統(tǒng)計(jì)、用戶及權(quán)限管理和包含很多系統(tǒng)初始化小模塊的系統(tǒng)初始化模塊,然后再整合這些模塊使整個(gè)系統(tǒng)的功能統(tǒng)一在一個(gè)完整的框架下。在用戶界面方面,采用頁(yè)面框架導(dǎo)航的方式在一個(gè)頁(yè)面中實(shí)現(xiàn)整個(gè)系統(tǒng)的功能,按這樣的思想,用戶界面的設(shè)計(jì)就采用框架的結(jié)構(gòu)實(shí)現(xiàn),頁(yè)面分為三個(gè)框架頁(yè),頂部的為一個(gè)LOGO圖標(biāo),左邊的框架頁(yè)設(shè)計(jì)成本系統(tǒng)的一個(gè)功能導(dǎo)航頁(yè)面,相當(dāng)于系統(tǒng)的功能菜單。用戶的權(quán)限用查詢數(shù)據(jù)庫(kù)權(quán)限表的方式來(lái)控制導(dǎo)航頁(yè)的內(nèi)容來(lái)實(shí)現(xiàn)。在實(shí)現(xiàn)的過(guò)程中可能遇到的難題:頁(yè)面設(shè)計(jì)階段的界面設(shè)計(jì)和美工問(wèn)題,由于自身缺乏美術(shù)感,因此只能在用戶界面設(shè)計(jì)是多參考他人的設(shè)計(jì),并借鑒他人成功之處,盡可能在設(shè)計(jì)中利用開(kāi)放的素材資源,以及一些好的設(shè)計(jì)模板;系統(tǒng)用戶權(quán)限的設(shè)計(jì)方式,用數(shù)據(jù)庫(kù)表和應(yīng)用程序相結(jié)合來(lái)實(shí)現(xiàn),還是用數(shù)據(jù)庫(kù)的角色來(lái)實(shí)現(xiàn);系統(tǒng)的數(shù)據(jù)庫(kù)連接問(wèn)題,計(jì)劃在本系統(tǒng)中采用JDBC—ODBC橋接器來(lái)實(shí)現(xiàn)連接,這就要求有相應(yīng)數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序(本系統(tǒng)用SQL Server2000的驅(qū)動(dòng)程序),并建立起ODBC數(shù)據(jù)源,最后再用JAVA程序進(jìn)行連接;至于打印的問(wèn)題,我現(xiàn)在沒(méi)想到好的解決方法,只好把它留到系統(tǒng)開(kāi)發(fā)過(guò)程中再作處理。總之,現(xiàn)在系統(tǒng)還沒(méi)有開(kāi)始進(jìn)行相關(guān)的具體設(shè)計(jì)和實(shí)現(xiàn),因此,系統(tǒng)將要涉及到的各種問(wèn)題,現(xiàn)在是不可能完全預(yù)知的,所以,只有留待到系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)階段再進(jìn)行分析,處理。報(bào)告人簽名: 年 月 日3、進(jìn)度計(jì)劃序號(hào)日期進(jìn)度安排1第1,2周查閱資料2第3周完成文獻(xiàn)綜述和開(kāi)題報(bào)告3第4-5周熟悉開(kāi)發(fā)環(huán)境4第6-13周系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)5第14-15周程序調(diào)試與測(cè)試6第16周撰寫(xiě)論文,準(zhǔn)備答辯784、指導(dǎo)教師意見(jiàn)指導(dǎo)教師簽名: 年 月 日
附件D:
畢業(yè)設(shè)計(jì)
外文譯文
指導(dǎo)教師評(píng)語(yǔ):
指導(dǎo)教師評(píng)定成績(jī) 簽字:
交叉評(píng)閱教師評(píng)語(yǔ):
交叉評(píng)閱教師評(píng)定成績(jī) 簽字:
學(xué)生姓名: 完成日期 20 年 月 日
教 務(wù) 處
譯文:
JDBC與JSP研究
1JDBC入門(mén)
本文闡述了JDBC(數(shù)據(jù)庫(kù)連接)API(應(yīng)用程序接口)的基本內(nèi)容。在這里,你將學(xué)到用基本的JDBC API去創(chuàng)建表單,插入數(shù)值,查詢表單,檢索結(jié)果,修改表單,創(chuàng)建動(dòng)態(tài)語(yǔ)句,完成事務(wù),捕捉異常和錯(cuò)誤。
本文來(lái)自SUN公司關(guān)于JDBC基礎(chǔ)內(nèi)容的官方指南。
--概述
--建立連接
--第一個(gè)JDBC語(yǔ)句
--精制JDBC語(yǔ)句
--執(zhí)行DDL語(yǔ)句
--執(zhí)行查詢語(yǔ)句
--結(jié)果集訪問(wèn)說(shuō)明
--事務(wù)處理
--異常和錯(cuò)誤處理
--簡(jiǎn)單的代碼和編輯規(guī)則
1.1 概述
JDBC的訪問(wèn)級(jí)接口是提供了SQL數(shù)據(jù)庫(kù)操作和更新操作的編程接口。他們通過(guò)帶數(shù)據(jù)庫(kù)接口的庫(kù)程序允許在普通的程序中調(diào)用SQL。特別的,Java提供了很多非常簡(jiǎn)單的基于JDBC的接口。
這里有一條簡(jiǎn)單的方法可也看到在訪問(wèn)級(jí)發(fā)生了什么:你正在寫(xiě)一個(gè)簡(jiǎn)單的Java程序。在程序的某處,你需要和數(shù)據(jù)庫(kù)交換數(shù)據(jù)。用標(biāo)準(zhǔn)的庫(kù)程序,你就可也打開(kāi)一個(gè)數(shù)據(jù)庫(kù)的連接。接下來(lái),用JDBC來(lái)發(fā)送SQL代碼給數(shù)據(jù)庫(kù),并且加工要返回的結(jié)果。等到你結(jié)束工作,就關(guān)閉數(shù)據(jù)連接。
這樣的方法需要和內(nèi)嵌SQL的預(yù)編輯方法相比較。后者含有一個(gè)預(yù)編輯過(guò)程,在這個(gè)過(guò)程中內(nèi)嵌的SQL語(yǔ)句被轉(zhuǎn)化為主機(jī)語(yǔ)言代碼(C/C++)。訪問(wèn)級(jí)的接口不要求預(yù)編輯過(guò)程就避免了內(nèi)嵌SQL語(yǔ)句轉(zhuǎn)化的過(guò)程。這樣在增加輕便性的同時(shí)使客戶—服務(wù)的關(guān)系更清晰。
1.2 建立連接
當(dāng)然,最先要做的是在你的計(jì)算機(jī)上安裝Java,JDBC和DBMS。由于我們想要連接Oracle數(shù)據(jù)庫(kù),我們也就需要一個(gè)支持它的驅(qū)動(dòng)程序。幸運(yùn)地是,我們有一個(gè)負(fù)責(zé)的主管他已經(jīng)在Leland的機(jī)子上為我們做好了。
和前面說(shuō)的一樣,在一個(gè)數(shù)據(jù)庫(kù)能被訪問(wèn)前,一個(gè)在程序(client)和數(shù)據(jù)庫(kù)(server)之間的連接必須被打開(kāi)。這包括兩步:
裝載特定廠商的驅(qū)動(dòng)程序
為什么需要這一步呢? 為了確保輕便和代碼重用,API被盡可能地設(shè)計(jì)來(lái)不依賴于一個(gè)數(shù)據(jù)庫(kù)的版本或廠家。由于不同DBMS擁有不同的行為,我們就需要告訴驅(qū)動(dòng)管理器我們想用那種DBMS,以便它能調(diào)用正確的驅(qū)動(dòng)程序。裝載Oracle驅(qū)動(dòng)程序可以用下面的代碼:
Class.forName(“oracle.jdbc.driver.OracleDriver”)建立連接
當(dāng)驅(qū)動(dòng)裝載完成就可以建立連接,你建立一個(gè)實(shí)際的連接可以用:
Connection con=DriverManger.getConnection(“jdbc:oracle: thin:
@dbaprodl:1544:SHRI_PRD”,username,password );
現(xiàn)在,讓我們看看這個(gè)語(yǔ)句是干什么的。第一個(gè)字符串是關(guān)于數(shù)據(jù)庫(kù)的URL,它包含了協(xié)議(JDBC),廠商(oracle),驅(qū)動(dòng)(thin),服務(wù)器(dbaprodl),端口號(hào)(1521),和一個(gè)服務(wù)實(shí)例(SHRI_PRD)。用戶名和密碼就是你過(guò)去輸入SQLPLUS以進(jìn)入你的帳戶的用戶名和密碼。
這就是建立連接的步驟。最后一步返回來(lái)的是一個(gè)打開(kāi)的連接,我們將用它來(lái)向數(shù)據(jù)庫(kù)傳遞SQL語(yǔ)句。在上面的代碼中,con是一個(gè)打開(kāi)的連接,并且我們?cè)诤竺孢€將用到它。注意:上面提到的價(jià)值在我們的環(huán)境中是用根據(jù)的。他們?cè)趧e的環(huán)境中有不同的價(jià)值。
1.3 創(chuàng)建JDBC 語(yǔ)句
JDBC語(yǔ)句對(duì)象是用來(lái)發(fā)送你的SQL語(yǔ)句到DBMS的,不是與SQL語(yǔ)句相混淆的。JDBC語(yǔ)句是綁定在一個(gè)打開(kāi)的連接上的,不只是一個(gè)簡(jiǎn)單的SQL語(yǔ)句。你能把JDBC語(yǔ)句對(duì)象想象成嵌在連接上的一個(gè)信息通道,它能傳遞一個(gè)或多個(gè)你的SQL語(yǔ)句(那些你要執(zhí)行的)到DBMS。
一個(gè)活動(dòng)的連接要求創(chuàng)建一個(gè)Statement對(duì)象。下面的小代碼,就是用剛才的連接con,來(lái)為你實(shí)現(xiàn)Statement對(duì)象的:
Statement stmt = con.createStatement();
這樣,一個(gè)Statement對(duì)象存在了,但是它沒(méi)有向DBMS傳遞一個(gè)SQL語(yǔ)句。我們將在下一節(jié)學(xué)習(xí)它。
1.4 精制JDBC語(yǔ)句
有時(shí),用精制的語(yǔ)句對(duì)象來(lái)向DBMS發(fā)送SQL語(yǔ)句能更方便或更有效。它區(qū)別于其超類Statement的主要特征是,它不像Statement,在它被創(chuàng)建時(shí)就被給與了一個(gè)正確的SQL語(yǔ)句。這個(gè)SQL語(yǔ)句接下來(lái)就以正確的方式發(fā)向DBMS,并且在那里得到編譯。因此,精制的語(yǔ)句實(shí)際上是連接的一個(gè)信道,并匯編有關(guān)SQL聲明.
和用普通的語(yǔ)句在每次用的時(shí)候都要編譯一次相比,它提供的優(yōu)勢(shì)是,當(dāng)你需要用相同的或相似的帶不同參數(shù)的查詢多次,語(yǔ)句就可以被DBMS編譯和優(yōu)化,而在不同參數(shù)時(shí),不再要求編譯。
PreparedStatements 也是用連接方法來(lái)創(chuàng)建的。下面的小代碼展示了怎么創(chuàng)建一個(gè)有三個(gè)輸入?yún)?shù)的帶參數(shù)SQL語(yǔ)句:
PreparedStatements prepareUpdateprice =con. preparedStatements(
“UPDATE Sells SET price = ? where bar = ? AND beer = ?”);
在執(zhí)行一個(gè)PreparedStatement前,我們需要提供參數(shù)的值。這可以調(diào)用定義在PreparedStatement類中的SET XXX方法來(lái)完成。最常用的方法是setInt,setFloat,setDouble,setString 等。你可以設(shè)置參數(shù)的值在執(zhí)行準(zhǔn)備的語(yǔ)句前。
繼續(xù)上面的例子,我們將寫(xiě):
prepareUpdatePrice.setInt(1, 3);
prepareUpdatePrice.setString(2, "Bar Of Foo");
prepareUpdatePrice.setString(3, "BudLite");
1.5 執(zhí)行DDL語(yǔ)句
在JDBC中執(zhí)行SQL語(yǔ)句用很多樣式,他們依賴于SQL語(yǔ)句的目的。DDL(數(shù)據(jù)定義語(yǔ)言)語(yǔ)句,象表的創(chuàng)建和刪除語(yǔ)句,還有更新表的內(nèi)容的語(yǔ)句都是通過(guò)executeupdate方法執(zhí)行的。注意到這些命令都改變數(shù)據(jù)庫(kù)的狀態(tài),因此方法的名字包含”Update”。
下面的代碼是executeupdate語(yǔ)句的例子:
Statement stmt con.createStatement();
stmt. Executeupdate(“CREATE TABLE Sells” + “(bar VARCHAR2(40),beer
VARCHAR2(40),price REAL)”);
stmt. Executeupdate(“INSERT INTO Sells ” + “VALUES (‘Bar Of
Foo’,’BudLite’,2.00)” );
String sqlString= “CREATE TABLE Bars ” + “name
VARCHAR2(40),address VARCHAR2(80),license INT”);
Stmt. Executeupdate(sqlString);
由于SQL語(yǔ)句不太適合在一行上顯示,我們就把它打斷成兩個(gè)字符串,并且用加號(hào)連接起來(lái)以便它被編譯。特別注意“INSERT INTO Sells”和“VALUES”之間的間隔。也注意我們更愿意重用相同的Statement而不是重新創(chuàng)建一個(gè)。
在執(zhí)行executeUpdate時(shí)常常是調(diào)用DDL語(yǔ)句,返回的結(jié)果一般是0,在數(shù)據(jù)修改語(yǔ)句執(zhí)行時(shí)將返回一個(gè)大于或等于0的值,這個(gè)數(shù)據(jù)表明了其間的關(guān)系。
當(dāng)使用PreparedStatement時(shí),我們將執(zhí)行這樣的一個(gè)語(yǔ)句,它首先要設(shè)定參數(shù)的值(象上面所見(jiàn)的那樣),接著調(diào)用executeUpdate.
int n = prepareUpdatePrice.executeUpdate();
1.6 執(zhí)行SQL語(yǔ)句
作為和前一節(jié)的語(yǔ)句相對(duì)的語(yǔ)句,一個(gè)查詢希望得到一組記錄來(lái)作為結(jié)果,并且不改變數(shù)據(jù)庫(kù)的狀態(tài)。自然地,這里就有相應(yīng)的方法叫做executeQuery,它返回一個(gè)ResultSet對(duì)象作為其結(jié)果。
String bar,beer;
float price ;
ResultSet rs = stmt.executeQuery(“SELECT * FROM Sells”);
While( rs.next() ){
Bar = rs.getString(“bar”);
Beer = rs.getString(“beer”);
Price = rs.getFloat(“price”);
System.out.println(bar + “sells” + beer + “for” + price + “Dollars.”);
}
查詢得到的結(jié)果集包含在一個(gè)變量rs中,rs是ResultSet的一個(gè)實(shí)例。這樣的組對(duì)我們沒(méi)有太大的作用,除非我們能訪問(wèn)每一行和每行中的各個(gè)屬性。ResultSeta給我們提供了一個(gè)能讓我們依次訪問(wèn)每行的游標(biāo)。游標(biāo)僅僅是第一行的集。每次調(diào)用next方法使它移動(dòng)到下一行,如果下一行存在就返回真,如果沒(méi)有剩余行就返回錯(cuò)。
我們可以用適當(dāng)類型的getXXX方法去檢索行的各個(gè)屬性。 在前面的例子中,我們用了getDtring和getFloat兩個(gè)方法來(lái)訪問(wèn)各列的值。注意到我們用想得到的值得列的列名作為方法的參數(shù)。同時(shí)也注意,VARCHAR2類型的bar,beer被轉(zhuǎn)換為Java String,REAL轉(zhuǎn)換為Java float.
同樣地,我們可以指定列號(hào)來(lái)代替列名,也能得到相同的結(jié)果。這樣,有關(guān)的語(yǔ)句就應(yīng)該是:
Bar = rs.getString(1);
Beer = rs.getString(2);
Price = rs.getFloat(3);
當(dāng)使用PreparedStatement工作時(shí),我們應(yīng)該執(zhí)行一個(gè)設(shè)置好參數(shù)的查詢,并且用它調(diào)用executeQuery方法。
ResultSet rs = prepareUpdatePrice.executeQuery();
1.7 結(jié)果集訪問(wèn)說(shuō)明
JDBC提供了一系列的方法來(lái)找出你在處理結(jié)果集的那個(gè)地方,方法包括:getRow,isFirst,isBeforeFirst,isLast,isAfterLast.
他們提供可以任意訪問(wèn)結(jié)果集中各行的游標(biāo)。默認(rèn)的,游標(biāo)僅僅只能向前并且是只讀的。在為Connection創(chuàng)建Statement時(shí),你可以改變ResultSet的類型,使它成為更方便查找和更新的模型:
Statement stmt = con.createStartment(
ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery(“SELECT * FROM Sells”);
不同的類型選項(xiàng)有: TYPE_FORWARD_ONLY、TYPE_SCROLL_INSENSITIVE、和TYPE_SCROLL_SENSITIVE。你可以利用CONCUR_READ_ONLY和CONCUR_UPDATABLE選項(xiàng)來(lái)選擇是用只讀的還是可更新的游標(biāo)。用默認(rèn)的游標(biāo),你可以利用rs.next()來(lái)卷動(dòng)游標(biāo)。用可卷動(dòng)的游標(biāo)你可設(shè)置更多的選項(xiàng):
rs.absolute(3); // 移動(dòng)到第三tuple
rs.previous(); //向后移動(dòng)一個(gè)tuple(tuple 2)
rs.relative(2); //向后移動(dòng)兩個(gè)tuples(tuple 4)
rs. relative(-3); //往回移動(dòng)兩個(gè)tuples(tuple 1)
這里還有很多可卷動(dòng)游標(biāo)特征的細(xì)節(jié)??删韯?dòng)游標(biāo),雖然在某些應(yīng)用中很有用,但是它非常復(fù)雜,因此在使用時(shí)要小心和克制。更多關(guān)于游標(biāo)細(xì)節(jié)的操作技術(shù)可以在New Features in the JDBC 2.0 API上找到。
1.8 事務(wù)處理
JDBC允許多個(gè)SQL語(yǔ)句嵌入到一個(gè)單一的事務(wù)中。因而,我們用JDBC事務(wù)可以確保ACID(原子性、一致性、獨(dú)立性、完整性)屬性。
事務(wù)控制是通過(guò)連接對(duì)象完成的。當(dāng)連接建立時(shí),它就默認(rèn)是自動(dòng)提交型。這意味著每個(gè)SQL語(yǔ)句都被認(rèn)為是一個(gè)單獨(dú)得事務(wù),并且只要它自身執(zhí)行完成就馬上提交。(這樣并不完全精確,并且在大多數(shù)情況下,我們可能被它蒙蔽而不知道這些細(xì)節(jié)。)
我們能為連接關(guān)閉自動(dòng)提交,用:
con.setAutoCommit(false);
也可以再打開(kāi),用:
con. setAutoCommit(ture);
一旦自動(dòng)提交關(guān)閉,沒(méi)有SQL語(yǔ)句能被提交(那不是說(shuō),數(shù)據(jù)庫(kù)將永遠(yuǎn)得不到更新),直到你明確地調(diào)用commit()方法來(lái)告訴它提交。
Con.commit();
在提交之前的任何地方,我們都可也調(diào)用rollback()來(lái)卷回事務(wù),并恢復(fù)數(shù)據(jù)到上一次提交的地方(在嘗試更新之前)。下面是個(gè)融合了上面觀點(diǎn)的例子。
con.setAutoCommit(false);
Statement stmt = con.createStatement();
Stmt.executeUpdate(“INSERT INTO Sells VALUES(‘bar of
foo’,’budlite’,’1.00’)”);
con.rollback();
Stmt.executeUpdate(“INSERT INTO Sells VALUES(‘bar of
joe’,’Miller’,’2.00’)”);
con.commit();
con.setAutoCommit(true);
讓我們?yōu)g覽這個(gè)例子理解幾個(gè)方法的用法和作用。我們首先看看自動(dòng)提交關(guān)閉時(shí),接下來(lái)的幾條語(yǔ)句需要看成一個(gè)整體。我們嘗試在Sells表中插入記錄(‘bar of foo’,’budlite’,’1.00’))。然而,這個(gè)操作最終并沒(méi)完成(committed).當(dāng)我們調(diào)用rollback,我們?nèi)∠瞬迦搿W⒁?,Sells表現(xiàn)在仍和我們嘗試插入之前一樣。接著我們嘗試插入其他記錄,并且這次,我們提交了事務(wù)?,F(xiàn)在Sells表就受到了永久的影響,并且多了一條新的記錄。最后,我們重新開(kāi)啟了自動(dòng)提交。
我們同樣可以按需要地設(shè)定事務(wù)的獨(dú)立性。例如,我們可以設(shè)定事務(wù)獨(dú)立性為T(mén)RANSACTION_READ_COMMITTED,它不允許訪問(wèn)數(shù)據(jù)直到數(shù)據(jù)提交完畢,同時(shí)也不允許讀臟數(shù)據(jù)。在連接的接口中提供了5個(gè)獨(dú)立性級(jí)別。默認(rèn)下,獨(dú)立性級(jí)別是串行化 。JDBC允許查看數(shù)據(jù)庫(kù)設(shè)定的獨(dú)立性級(jí)別(用連接的getTransactionIsolation方法),也可以設(shè)定適當(dāng)?shù)募?jí)別(用連接的setTransactionIsolation方法)。
rollback常常和Java異常處理結(jié)合在一起來(lái)恢復(fù)不可預(yù)知的錯(cuò)誤。這樣的結(jié)合提供了簡(jiǎn)單而優(yōu)秀的處理數(shù)據(jù)完整性的機(jī)制。我們將在下一節(jié)學(xué)習(xí)JDBC的異常處理。
1.9 錯(cuò)誤與異常處理
事實(shí)上,在軟件項(xiàng)目中錯(cuò)誤是常常發(fā)生的。經(jīng)常,數(shù)據(jù)庫(kù)程序是一個(gè)危險(xiǎn)的應(yīng)用,并且溫和地捕捉和處理錯(cuò)誤是勢(shì)在必行的。程序應(yīng)該能恢復(fù)并使數(shù)據(jù)庫(kù)保持一致性的狀態(tài)。Rollback與Java異常處理機(jī)制協(xié)同工作是達(dá)到這一要求的一條清晰的道路。
客戶端(程序)訪問(wèn)服務(wù)器(數(shù)據(jù)庫(kù))需要是否有錯(cuò)誤從服務(wù)器返回。JDBC通過(guò)兩個(gè)不同級(jí)別的錯(cuò)誤情況(SQLException和SQLWarning)來(lái)獲取以上信息。SQLExceptions是Java異常,假如不處理,會(huì)終止應(yīng)用程序。SQLWarnings是SQLException的子類,但它們描述不致命的錯(cuò)誤或不預(yù)期的情況等,可以忽略。
在Java中,預(yù)計(jì)要拋出異?;蚓娴恼Z(yǔ)句被包含在try語(yǔ)句塊中。如果在try語(yǔ)句塊中的語(yǔ)句拋出了異常或警告,那么,在相應(yīng)的catch語(yǔ)句中將被捕獲。每個(gè)catch語(yǔ)句都被指明準(zhǔn)備捕獲那個(gè)異常。
下面是一個(gè)捕捉異常,使用錯(cuò)誤情況來(lái)卷回事務(wù)的例子:
try{
con.setAutoCommit(false);
stmt.executeUpdate(“CREATE TABLE Sells (bar VARCHAR2(40),”+”beer VARHAR2(40),price REAL)”);
stmt.executeUpdate("INSERT INTO Sells VALUES " +
"('Bar Of Foo', 'BudLite', 2.00)") ;
con.commit() ;
con.setAutoCommit(true) ;
}catch(SQLException ex) {
System.err.println("SQLException: " + ex.getMessage()) ;
con.rollback() ;
con.setAutoCommit(true) ;
}
既然這樣,一個(gè)異??隙ū粧伋?,因?yàn)殄e(cuò)誤的書(shū)寫(xiě)導(dǎo)致了beer被定義為VARHAR2。由于在DBMS中沒(méi)有這樣的類型,一個(gè)SQLException將被拋出。這樣輸出就將是:
Message: ORA-00902:invalid datatype
還有就是,如果你的數(shù)據(jù)類型正確,但萬(wàn)一你的你的數(shù)據(jù)庫(kù)超過(guò)了空間限制并不能再創(chuàng)建一個(gè)新的表。SQLWarning可以從Connection對(duì)象、Statement對(duì)象和ResultSet對(duì)象中找回來(lái)。每一個(gè)僅僅存放著最近的SQLWarning。因此,只要你用你的Statement對(duì)象執(zhí)行其他的語(yǔ)句,那么以前的警告就將被丟棄。下面的小代碼舉例說(shuō)明了怎么使用SQLWarning:
ResultSet rs = stmt.executeQuery("SELECT bar FROM Sells") ;
SQLWarning warn = stmt.getWarnings() ;
if (warn != null)
System.out.println("Message: " + warn.getMessage()) ;
SQLWarning warning = rs.getWarnings() ;
if (warning != null)
warning = warning.getNextWarning() ;
if (warning != null)
System.out.println("Message: " + warn.getMessage()) ;
SQLWarnings(相對(duì)于SQLExceptions)其實(shí)是相當(dāng)難得,最多的就是數(shù)據(jù)連接切斷的警告。后面將要指出的是在讀或?qū)憯?shù)據(jù)庫(kù)是這里存在的一個(gè)問(wèn)題。
1.11簡(jiǎn)單的代碼和編輯規(guī)則
有望地,到現(xiàn)在你已經(jīng)可以熟悉地用JDBC寫(xiě)復(fù)雜的代碼了。這里有一個(gè)簡(jiǎn)單的例子融合了上面多有的觀點(diǎn)。
我們還有一些簡(jiǎn)單的為教育的目的由Craig Jurney編寫(xiě)的代碼。你可以免費(fèi)地使用這些代碼來(lái)作為一個(gè)準(zhǔn)則,或者在將來(lái)寫(xiě)代碼是用作筐架,但是你要在你引用了代碼的應(yīng)用上做一個(gè)說(shuō)明。
SQLBuilder.java?- Creation of a Relation 關(guān)系的創(chuàng)建
SQLLoader.java?- Insertion of Tuples 插入記錄
SQLRunner.java?- Processes Queries 查詢過(guò)程
SQLUpdater.java?- Updating Tuples 更新記錄
SQLBatchUpdater.java?- Batch Updating 批更新
SQLUtil.java?- JDBC Utility Functions JDBC的有用函數(shù)
不要忘記用source /usr/class/cs145/all.env,它將正確的設(shè)置你的classpath。增加你的全局的classpath的簡(jiǎn)單命令:
elaine19:~$ javac SQLBuilder.java
elaine19:~$ java SQLBuilder
替換成:
elaine19:~$ javac SQLBuilder.java
elaine19:~$ java –classpath
/usr/pubsw/apps/oracle/8.1.5/jdbc/lib/classes111.zip: SQLBuilder
在java的用戶名和密碼文件中有固定的用戶名和密碼。他們必須被改成你自己的用戶名和密碼,這樣你才能訪問(wèn)數(shù)據(jù)庫(kù)。
這篇文章最初由Nathan Folkert在2000年春寫(xiě)給Jennifer Widom教授的CS145班,在2000年秋,它又被Mayank Bawa出租給Jeff Ullman教授的CS145班。Jim Zhuang在2005年夏作了一點(diǎn)小改動(dòng)。同時(shí)感謝Matt Laue的排版改正。
2利用JSP和JDBC技術(shù)訪問(wèn)動(dòng)態(tài)的WEB數(shù)據(jù)
這篇文章討論用JSP和JDBC技術(shù)來(lái)整合WEB站點(diǎn)上的靜態(tài)的、動(dòng)態(tài)的和數(shù)據(jù)庫(kù)的內(nèi)容。為了簡(jiǎn)單和舉例的需要,這里的JSP頁(yè)面用簡(jiǎn)短的腳本來(lái)揭示JSP開(kāi)發(fā)者根本的JDBC觀點(diǎn)而不是把它們隱藏在傳統(tǒng)的標(biāo)簽下。作者介紹了一種關(guān)鍵的設(shè)計(jì)途徑就是整合JavaBeans組件和JDBC,就好像JSP技術(shù)已經(jīng)運(yùn)用了bean和HTTP一樣。他也提供代碼來(lái)執(zhí)行這種整合。
建立在Java Servlet技術(shù)上, JSP技術(shù)是生成動(dòng)態(tài)內(nèi)容的Java 服務(wù)器端的核心。一種動(dòng)態(tài)內(nèi)容的來(lái)源是關(guān)系數(shù)據(jù)庫(kù)。為了管理來(lái)自在線社團(tuán)的電子商務(wù)事務(wù),WEB站點(diǎn)用關(guān)系數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)各種信息:目錄條款,圖像,文本,注冊(cè)用戶的數(shù)據(jù)等等。這篇文章討論利用JDBC的JSP與關(guān)系數(shù)據(jù)庫(kù)的應(yīng)用。JDBC的意思就是通過(guò)它,Java程序可以操作關(guān)系數(shù)據(jù)庫(kù)。
為了能更好的學(xué)習(xí)這篇文章,你應(yīng)該熟悉JDBC和SQL。
2.1 JDBC基礎(chǔ)
JDBC是連接Java和SQL數(shù)據(jù)庫(kù)的橋梁。首要的JDBC對(duì)象描述數(shù)據(jù)庫(kù)的連接且語(yǔ)句的執(zhí)行要依賴這個(gè)連接。和關(guān)系數(shù)據(jù)庫(kù)一起使用的兩種基本的語(yǔ)句是查詢和更新。作為先決條件,你首先需要用java.sql.DriverManger類建立一個(gè)數(shù)據(jù)庫(kù)連接。連接的建立要花費(fèi)很長(zhǎng)的時(shí)間,因此,在強(qiáng)事務(wù)環(huán)境中,比如一個(gè)WEB服務(wù)器,只要可能你就想要重用連接。這樣的重用稱為connection pooling。
如果你的JDBC技術(shù)已經(jīng)生疏了,在例子Listing 1中代碼片段說(shuō)明了怎樣建立數(shù)據(jù)庫(kù)連接,用連接創(chuàng)建statement對(duì)象,發(fā)送SQL查詢,處理結(jié)果,以及釋放JDBC資源。
Listing 1.Simple JDBC code
Connection connection = DriverManager.getConnection(URL, user, password);Statement statement = connection.createStatement();ResultSet results = statement.executeQuery(sqlQuery);while (results.next()){ ... process query results ... logSQLWarnings(results.getWarnings());}results.close();statement.close();connection.close();
在現(xiàn)實(shí)生活中,JDBC代碼沒(méi)有這么簡(jiǎn)單;異常和警告情況需要處理。例子Listing 2 是相同的JDBC例子但是增加了JDBC異常和警告的處理。在這個(gè)例子中,異常和警告是簡(jiǎn)單和笨拙的,在異常情況下,我們終止操作??墒?,dinally{}子句確保了資源的釋放。
在這里僅僅暗示實(shí)際的處理結(jié)果。我們將在本文的后面找到更詳細(xì)的內(nèi)容。如果我們正在執(zhí)行一個(gè)數(shù)據(jù)庫(kù)更新而不是查詢,我們就應(yīng)該用下面的代碼來(lái)替換while循環(huán)的內(nèi)容:
int count = statement.executeUpdate(sqlUpdate);
executeUpdate方法返回更新語(yǔ)句所影響的行數(shù)。如果這些代碼看起來(lái)不熟悉,你也許想花更多的時(shí)間來(lái)回顧一些關(guān)于JDBC的指南信息,在資源章節(jié)可以找到。
除了executeQuery()和executeUpdate()之外,類Statement支持一般的execute()方法。這就允許編輯一般的SQL代碼,盡管處理的結(jié)果復(fù)雜很多。
2.2 在JSP頁(yè)面中使用JDBC
為了來(lái)自數(shù)據(jù)庫(kù)的動(dòng)態(tài)內(nèi)容,我們應(yīng)該怎樣結(jié)合JDBC和JSP技術(shù)。
一般的規(guī)則是,好的JSP實(shí)踐經(jīng)驗(yàn)建議我們把表示模式和行為模式分離開(kāi)來(lái)。這類似于在OO編程中的模型-視圖-控制器(MVC)范例。這樣分離的一個(gè)原因是在程序員創(chuàng)建的基于JSP技術(shù)的應(yīng)用可能包含了模型和控制器組件,然而,視圖組件是在頁(yè)面設(shè)計(jì)器里編輯的。在JSP應(yīng)用體系結(jié)構(gòu)下,視圖的角色決定了它的職責(zé)是描述,并只在JSP頁(yè)面中被處理??刂破鞯慕巧琼憫?yīng)請(qǐng)求,往往扮演著servlet的角色,并且多數(shù)的JSP開(kāi)發(fā)者漸漸地對(duì)在控制器角色里使用JSP頁(yè)面的優(yōu)越性達(dá)成了共識(shí)。模型的角色是對(duì)應(yīng)用實(shí)體的行為進(jìn)行建模,它典型的表現(xiàn)在JavaBeans組件上。
除了決定數(shù)據(jù)庫(kù)在MVC范例中對(duì)應(yīng)的位置之外,你有好幾種在JSP頁(yè)面中整合JDBC技術(shù)的選擇。例如,你可以用腳本插入JDBC,用庫(kù)標(biāo)簽插入,或把它隱藏在定制的標(biāo)簽或其它類中。
我們下面將看到幾個(gè)不同途徑的例子并討論它們的使用方法。
2.3 一個(gè)JSP scriptlet的例子
一個(gè)新的JSP程序員很可能做的第一件事就是寫(xiě)一個(gè)scriptlet來(lái)訪問(wèn)JDBC?;蛟S它在一些地方象在Listing 3中的那個(gè)在頁(yè)面中用JDBC實(shí)現(xiàn)"hit counter"的例子。(這頁(yè)的一個(gè)生動(dòng)的版本是在JSP開(kāi)發(fā)者指南的WEB站點(diǎn)上。)
Listing 3 JSP page using JDBC in a scriptlet
<jsp:directive.page import="java.sql.*" />
<jsp:scriptlet>
Class.forName("org.gjt.mm.mysql.Driver");
Connection connection =
DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "", "");
Statement statement = connection.createStatement();
int changed =
statement.executeUpdate("update counters set hitCount = hitCount + 1 " +
"where page like '" + request.getRequestURI() + "'");
if (changed == 0) statement.executeUpdate("insert counters(page) values('" +
request.getRequestURI() + "')");
ResultSet rs =
statement.executeQuery("select hitCount from counters where page like '" +
request.getRequestURI() + "'");
rs.next();
int hitCount = rs.getInt(1);
statement.close();
connection.close();
</jsp:scriptlet>
<HTML>
<HEAD>
<TITLE>JDBC scriptlet example</TITLE>
</HEAD>
<BODY>
<P>This page has been hit
<jsp:expression>hitCount</jsp:expression>
times. The page counter is implemented by a JSP scriptlet calling
the JDBC package directly.</P>
</BODY>
</HTML>
這頁(yè)包含了一個(gè)scriptlet(前面突出的部分),它連接數(shù)據(jù)庫(kù),創(chuàng)建statement,以及嘗試更新由頁(yè)面URI鍵入的紀(jì)錄。如果更新不影響任何行,這個(gè)例子中假定沒(méi)有這樣的行并新增一行。最后,這個(gè)scriptlet查詢數(shù)據(jù)庫(kù)當(dāng)前命中的數(shù)并賦值給一個(gè)本地變量。更進(jìn)一步,在這個(gè)JSP頁(yè)面的描述部分,突出的JSP表達(dá)式被用來(lái)傳遞上面的值。
盡管功能正確,但這個(gè)JSP頁(yè)面仍有幾個(gè)問(wèn)題。首先這個(gè)scriptlet并不是一個(gè)無(wú)程序頁(yè)面設(shè)計(jì)師會(huì)先看到的。坦白地,甚至使程序員也不想在頁(yè)面中看到這樣的東西。第二,頁(yè)面缺少了異常處理,那可是真實(shí)的JDBC代碼必不可少的部分。第三,hit counter的執(zhí)行是逐字逐句地植入的,因此任何改動(dòng)都需要傳播到包含hit counter 的每個(gè)JSP頁(yè)面。

注意:你不可能像這樣來(lái)執(zhí)行一個(gè)hit counter .為每次請(qǐng)求改變數(shù)據(jù)庫(kù)的代價(jià)是必不可少的。無(wú)論如何,這個(gè)hit counter都提供了一個(gè)查詢和更新數(shù)據(jù)庫(kù)的簡(jiǎn)單的例子,這說(shuō)明我們可以用各種手段把你的JSP與JDBC頁(yè)整合起來(lái).注意:你不可能像這樣來(lái)執(zhí)行一個(gè)hit counter .為每次請(qǐng)求改變數(shù)據(jù)庫(kù)的代價(jià)是必不可少的。無(wú)論如何,這個(gè)hit counter都提供了一個(gè)查詢和更新數(shù)據(jù)庫(kù)的簡(jiǎn)單的例子,這說(shuō)明我們可以用各種手段把你的JSP與JDBC頁(yè)整合起來(lái).
因此,我們?cè)撊绾窝b配這個(gè)JSP頁(yè)面。一個(gè)再三提到的方法是用庫(kù)標(biāo)簽來(lái)除去scriptlet。在我們的下一個(gè)例子中,將看到這種可選擇的解決方案。
2.4 一個(gè)用DBTags的庫(kù)標(biāo)簽例子
一個(gè)初學(xué)JSP的程序員最先聽(tīng)到的事,經(jīng)常是來(lái)自朋友和專家的關(guān)于不要使用scriptlet的建議。相反,他們建議你用定制的標(biāo)簽。定制的標(biāo)簽是一種手段,通過(guò)它可擴(kuò)張JSP平臺(tái):定制XML風(fēng)格的標(biāo)簽,依靠代碼庫(kù),實(shí)現(xiàn)渴望的功能。我們將在下一個(gè)例子中,它們工作得多么良好。
Jakarta 庫(kù)標(biāo)簽工程是Jakarta工程的一個(gè)子工程,正式實(shí)施的范圍是Java Servlet和JSP 技術(shù)。
一個(gè)由Jakarta 庫(kù)標(biāo)簽工程贊助發(fā)展的包就是DBTags定制標(biāo)簽庫(kù)。(從前叫做JDBC標(biāo)簽庫(kù))。在Listing 4中的例子實(shí)現(xiàn)了和Listing 3中相同的hit counter,僅僅用定制標(biāo)簽代替了scriptlet
Listing 4. JSP page using DBTags
<HTML>
<HEAD>
<TITLE>Jakarta DBTags example</TITLE>
</HEAD>
<BODY>
<%@ taglib uri="http://jakarta.apache.org/taglibs/dbtags" prefix="sql" %>
<%-- open a database connection --%>
<sql:connection id="conn1">
<sql:url>jdbc:mysql://localhost/test</sql:url>
<sql:driver>org.gjt.mm.mysql.Driver</sql:driver>
</sql:connection>
<%-- insert a row into the database --%>
<sql:statement id="stmt1" conn="conn1">
<%-- set the SQL query --%>
<sql:query>
insert counters(page,hitCount) values('<%=request.getRequestURI()%>', 0)
</sql:query>
<%-- the insert may fail, but the page will continue --%>
<sql:execute ignoreErrors="true"/>
</sql:statement>
<%-- update the hit counter --%>
<sql:statement id="stmt1" conn="conn1">
<%-- set the SQL query --%>
<sql:query>
update counters set hitCount = hitCount + 1 where page like '<%=request.getRequestURI()%>'
</sql:query>
<%-- execute the query --%>
<sql:execute/>
</sql:statement>
<P>This page has been hit
<%-- query the hit counter --%>
<sql:statement id="stmt1" conn="conn1">
<sql:query>
select hitCount from counters where page like '<%=request.getRequestURI()%>'
</sql:query>
<%-- process only the first row of the query --%>
<sql:resultSet id="rset2" loop="false">
<sql:getColumn position="1"/>
</sql:resultSet>
</sql:statement>
times. The page counter is implemented using the Jakarta Project's
DBTags tag library, calling JDBC indirectly.</P>
<%-- close a database connection --%>
<sql:closeConnection conn="conn1"/>
</BODY>
</HTML>
我不了解你,但我有一點(diǎn)失望。那看起來(lái)比上面那個(gè)scriplet例子好要不清晰,并且我不知道是否有HTML設(shè)計(jì)者會(huì)因它而高興,等等。那里出錯(cuò)了呢?畢竟,我們遵守了人們的建議:我們除去了scriplet,代替為定制標(biāo)簽。
他們沒(méi)有告訴你關(guān)于標(biāo)簽庫(kù)的是:標(biāo)簽設(shè)計(jì)是語(yǔ)言設(shè)

發(fā)展定制標(biāo)簽庫(kù)是相當(dāng)直接的,但是它確實(shí)要耗費(fèi)一些時(shí)間和精力。我經(jīng)常推介標(biāo)簽作者首先用scriptlets建立標(biāo)簽行為的圓型,接下來(lái)才把這些scriptlets轉(zhuǎn)換為標(biāo)簽。一個(gè)可選的方法是用Allaire的JRun Server Tags(JST),它能使每個(gè)你的原始標(biāo)簽庫(kù)作為一個(gè)JSP頁(yè)面。JST可以在運(yùn)行時(shí)可以轉(zhuǎn)換這些頁(yè)面為標(biāo)簽,因此,JST技術(shù)很明顯地服務(wù)于客戶端頁(yè)面。盡管Allaire警告說(shuō)“建立JST的目的是可移植技術(shù),以便所有J2EE社團(tuán)的成員都能平衡他們的利益”,但JST現(xiàn)在僅僅在JRun中可用。時(shí)間將會(huì)證明JST是否會(huì)成為開(kāi)發(fā)標(biāo)記更通用的工具。與此同時(shí),我們發(fā)現(xiàn)scriptlet為開(kāi)發(fā)標(biāo)記的業(yè)務(wù)邏輯奠定了良好的基礎(chǔ);邏輯經(jīng)調(diào)試后,我們把它遷移成為標(biāo)記處理程序類。發(fā)展定制標(biāo)簽庫(kù)是相當(dāng)直接的,但是它確實(shí)要耗費(fèi)一些時(shí)間和精力。我經(jīng)常推介標(biāo)簽作者首先用scriptlets建立標(biāo)簽行為的圓型,接下來(lái)才把這些scriptlets轉(zhuǎn)換為標(biāo)簽。一個(gè)可選的方法是用Allaire的JRun Server Tags(JST),它能使每個(gè)你的原始標(biāo)簽庫(kù)作為一個(gè)JSP頁(yè)面。JST可以在運(yùn)行時(shí)可以轉(zhuǎn)換這些頁(yè)面為標(biāo)簽,因此,JST技術(shù)很明顯地服務(wù)于客戶端頁(yè)面。盡管Allaire警告說(shuō)“建立JST的目的是可移植技術(shù),以便所有J2EE社團(tuán)的成員都能平衡他們的利益”,但JST現(xiàn)在僅僅在JRun中可用。時(shí)間將會(huì)證明JST是否會(huì)成為開(kāi)發(fā)標(biāo)記更通用的工具。與此同時(shí),我們發(fā)現(xiàn)scriptlet為開(kāi)發(fā)標(biāo)記的業(yè)務(wù)邏輯奠定了良好的基礎(chǔ);邏輯經(jīng)調(diào)試后,我們把它遷移成為標(biāo)記處理程序類。
計(jì)。大多數(shù)標(biāo)簽庫(kù)都是在約定的時(shí)間內(nèi),由程序員寫(xiě)給程序員的;這些標(biāo)簽的語(yǔ)義連接給其它的程序員。此外,還記得模型和描述的分離嗎?DBTags并不是很好的支持這種分離。Sql:getColumn標(biāo)簽和jsp:getProperty事件很相似。它將DBTags結(jié)果直接發(fā)到輸出流中。這使得很難在描述想要的表的輸出流時(shí)不用DBTags。最后,注意在Listing 3和Listing 4的例子中的邏輯的不同。DBTags執(zhí)行來(lái)自JDBC的更新語(yǔ)句的標(biāo)簽表示形式。只有查詢才可以被找回。這意味著我們知道有多少行被更新語(yǔ)句所更新。因此,我們轉(zhuǎn)換Update和insert語(yǔ)句;我們常常嘗試插入一個(gè)新的記錄,強(qiáng)迫它忽略任何錯(cuò)誤,并在接下來(lái)執(zhí)行更新。
公平地看待DBTags標(biāo)簽庫(kù),他并不是一個(gè)對(duì)程序員有害的標(biāo)簽庫(kù)。除開(kāi)對(duì)更新量的不足,這代碼提供了一個(gè)相當(dāng)優(yōu)秀的JDBC計(jì)劃。潛藏的問(wèn)題人仍然存在;標(biāo)簽提供的功能少于直接轉(zhuǎn)換JDBC包。不同于隱藏某些異常處理,標(biāo)簽庫(kù)不真的提供任何從scriptlets的提取。他確實(shí)不幫助從功能中分離描述。
因此,真正的問(wèn)題不在于是使用scriptlet還是使用標(biāo)記;這種問(wèn)題不是分離功能和表示的問(wèn)題的原因,而是結(jié)果。解決方案是要以適當(dāng)?shù)恼f(shuō)明級(jí)別上為表示頁(yè)面的作者提供更高級(jí)別的功能。認(rèn)為標(biāo)記優(yōu)于scriptlet的原因在于:根據(jù)定義,scriptlet 是編程,而標(biāo)記可以表示高級(jí)概念。
2.5 對(duì)表示頁(yè)面隱藏JDBC
將JDBC同JSP技術(shù)集成時(shí),我們希望對(duì)表示作者盡可能多的隱藏該集成。在我們顯現(xiàn)數(shù)據(jù)庫(kù)概念的地方,我們希望在恰當(dāng)?shù)某橄蠹?jí)別上顯現(xiàn)這些概念。這一方法引出了我們的下一個(gè)示例。
在清單5中的示例中,我們對(duì)表示頁(yè)面隱藏了JDBC集成。(這個(gè)頁(yè)面的?實(shí)際版本位于JavaServer Pages Developers Guide Web站點(diǎn))
清單5 隱藏了JDBC的JSP頁(yè)面
<jsp:directive.include file="/pagelets/hitCounter.jsp" />
<HTML>
<HEAD>
<TITLE>JDBC hidden example</TITLE>
</HEAD>
<BODY>
<P>This page has been hit
<jsp:getProperty name="hitCounter" property="int" />
times. The page counter is implemented indirectly: a JavaBeans component containing the
hit count is inserted into the environment and referenced within the page using
the JSP getProperty action. The JSP page doesn't have any exposure to JDBC.</P>
</BODY>
</HTML>
被包含的hitCounter.jsp文件負(fù)責(zé)設(shè)置環(huán)境。內(nèi)容可以是scriptlet、標(biāo)記或只是一個(gè)taglib偽指令;只要是為表示頁(yè)面建立預(yù)期環(huán)境的都可以作為內(nèi)容。如果您愿意,您可以把getProperty操作替換成定制標(biāo)記;例如:
This page has been hit
<page:hitcounter />
times.
如前所述,這些點(diǎn)擊計(jì)數(shù)器示例純粹用作說(shuō)明;每個(gè)頁(yè)面都執(zhí)行這樣的數(shù)據(jù)庫(kù)操作將會(huì)是不必要的開(kāi)銷。上面這個(gè)示例說(shuō)明事實(shí)上您希望以何種方式顯現(xiàn)點(diǎn)擊計(jì)數(shù)器。通過(guò)把它隱藏在定制標(biāo)記里,我們就把該實(shí)現(xiàn)徹底隱藏了起來(lái)。現(xiàn)在我們可以聚集點(diǎn)擊計(jì)數(shù)運(yùn)行時(shí)信息,并周期性的更新數(shù)據(jù)庫(kù)(比如,在每次會(huì)話結(jié)束時(shí))。甚至連存儲(chǔ)方式(數(shù)據(jù)庫(kù)或是別的)也對(duì)表示頁(yè)面作者隱藏了。這正是我們?cè)贒evTech實(shí)現(xiàn)點(diǎn)擊計(jì)數(shù)器的方式:我們利用bean類實(shí)現(xiàn)點(diǎn)擊計(jì)數(shù)器模式行為。標(biāo)記把該行為結(jié)合到了我們的頁(yè)面里。
2.6 集成JavaBean組件
到目前為止,示例一直都相當(dāng)簡(jiǎn)單,但大多數(shù)數(shù)據(jù)庫(kù)操作都比這些簡(jiǎn)單的查詢和更新要復(fù)雜。因此,既然我們已經(jīng)討論了把JDBC用于JSP頁(yè)面的一些基本原則,就讓我們用一個(gè)略微復(fù)雜些但肯定更加通用的一類應(yīng)用來(lái)結(jié)束這篇文章。
這一部分的示例(下面清單9)將指出一種方法以支持Web站點(diǎn)上訪問(wèn)者提供的內(nèi)容。換句話說(shuō),我們希望允許訪問(wèn)者讀取與某一URI關(guān)聯(lián)的數(shù)據(jù)庫(kù)內(nèi)容并撰寫(xiě)額外的內(nèi)容。這樣的內(nèi)容在現(xiàn)在的Web站點(diǎn)上相當(dāng)常見(jiàn)。同樣的基本部分可用于構(gòu)造:
評(píng)論頁(yè)面,例如在http://Amazon.com找到的那些頁(yè)面
鏈接頁(yè)面
公告牌
Wikiweb
通過(guò)由不同技術(shù)背景的設(shè)計(jì)人員編寫(xiě),本例中JSP組件稍微再精細(xì)些的版本就可以實(shí)現(xiàn)看上去截然不同的Web頁(yè)面。這些頁(yè)面看上去的唯一的相同之處就是用于訪問(wèn)者撰寫(xiě)內(nèi)容。
我們的annotation(注釋)示例使用HTML表單。HTML表單用于JSP時(shí),使用屬性映射到表單域的bean變得方便了。這使setProperty標(biāo)記可以變戲法:
清單6 映射到表單的Bean實(shí)例
<%-- setup a bean instance that matches our form --%>
<jsp:useBean id="instance-name" class="bean-class" ... />
<%-- set all bean properties that match a form field --%>
<jsp:setProperty name="instance-name" property="*" />
集成JavaBean組件是JSP技術(shù)設(shè)計(jì)方面的一個(gè)過(guò)人之處。不幸的是bean和JDBC之間的集成根本不是無(wú)縫的,因此我們針對(duì)DevTech的JDBC工作開(kāi)發(fā)了一個(gè)包,它不僅提供了bean和JDBC的集成,而且還有必要的異常處理,從而使程序員不必應(yīng)付這些細(xì)節(jié)。

映射bean和ResultSet
示例使用com.devtech.sql以使說(shuō)明簡(jiǎn)潔。示例使用Java Reflection和Introspection,依靠列名及屬性名提供JDBC數(shù)據(jù)和bean屬性間的映射。您可以把DevTech包替換成自己的代碼。
映射bean和ResultSet
示例使用com.devtech.sql以使說(shuō)明簡(jiǎn)潔。示例使用Java Reflection和Introspection,依靠列名及屬性名提供JDBC數(shù)據(jù)和bean屬性間的映射。您可以把DevTech包替換成自己的代碼。映射bean和ResultSet
示例使用com.devtech.sql以使說(shuō)明簡(jiǎn)潔。示例使用Java Reflection和Introspection,依靠列名及屬性名提供JDBC數(shù)據(jù)和bean屬性間的映射。您可以把DevTech包替換成自己的代碼。
annotation(注釋)示例使用com.devtech.sql包中的兩種查詢和更新方法。這里用到的查詢方法傳遞一個(gè)bean類、一個(gè)SQL查詢和一個(gè)Object數(shù)組填充查詢中的占位符。在這種情況下,僅有的占位符是給頁(yè)面的URL的。結(jié)果是一個(gè)數(shù)據(jù)庫(kù)游標(biāo)對(duì)象,它必須是一種迭代器。
清單7 數(shù)據(jù)庫(kù)游標(biāo)對(duì)象
dataBase.queryCursor(AnnotationDBBean.class, new String[] { URL },
"select page, author, annotation, DATE_FORMAT(whenPosted, '%W %d%b%y %T')" +
" as whenPosted from annotations where page like ?");
這個(gè)查詢方法的有趣之處在于指定類型的bean將會(huì)為您實(shí)例化,只要bean屬性名同ResultSet中的列名相對(duì)應(yīng),屬性值就會(huì)被自動(dòng)設(shè)置。每次您用游標(biāo)選擇下一行時(shí),bean的屬性就會(huì)根據(jù)ResultSet被自動(dòng)設(shè)置。
用到的這種特殊更新方法有一個(gè)bean實(shí)例、一個(gè)String數(shù)組及一條update語(yǔ)句作為參數(shù)。String數(shù)組值規(guī)定了用來(lái)填充更新中的占位符的預(yù)期bean屬性。在這種情況下,page、author和annotation屬性是根據(jù)bean選擇的。
清單8 更新方法
int count = dataBase.update(annotationBean,
new String[] { "page", "author", "annotation" },
"insert into annotations(page, author, annotation) values(?, ?, ?)");
我們的JSP頁(yè)面示例annotations.jsp如清單9中所示。高亮的部分指出兩個(gè)可以用定制標(biāo)記替換的scriptlet,如清單 10 中所示。一些為頁(yè)面設(shè)計(jì)者提供幫助的JSP組件、把動(dòng)態(tài)內(nèi)容放到頁(yè)面上去的getProperty操作以及標(biāo)準(zhǔn)HTML組成了頁(yè)面的剩余部分。使用JSP注釋的原因是因?yàn)镴SP注釋是私有的,不會(huì)出現(xiàn)在輸出流中。
清單9 annotation(注釋)的JSP頁(yè)面
<jsp:directive.include file="/pagelets/annotate.jsp" />
<%--
By the time we arrive here, the annotation bean has been established, and if the
form is submitted, the contents will be posted to the database. The page
property is initialized. If the author is known during this session, that property
is also initialized.
Bean:"annotation"
Properties:String page;
String author;
String annotation;
String whenPosted;
Access to any bean property follows the format:
<jsp:getProperty name="annotation" property="property-name" />
-%>
<HTML>
<HEAD>
<TITLE>Comments for <jsp:getProperty name="annotation" property="page" /></TITLE>
</HEAD>
<BODY>
<p align="left"><font size="+1">
Comments for <i><jsp:getProperty name="annotation" property="page" /></i>
</font>.</p>
<CENTER><HR WIDTH="100%"></CENTER>
<!-- Annotation Submission Form -->
<FORM method="POST">
<TABLE>
<TR>
<TH align="left">Name:</TH>
<TD><INPUT type=text name=author size=50 maxlength=60
value="<jsp:getProperty name="annotation" property="author" />"> </TD>
</TR>
<TR>
<TH valign="top" align="left">Note:</TH>
<TD><TEXTAREA name=annotation cols=40 rows=5 wrap=virtual>
<jsp:getProperty name="annotation" property="annotation" /></TEXTAREA></TD>
</TR>
<TR>
<TD align="center" colspan="2"><INPUT type=submit value="Add Comment"></TD>
</TR>
</TABLE>
</FORM>
<!-- End of Annotation Submission Form -->
<!-- beginning of annotations -->
<%--
The following section iterates through all annotations in the database for the
requested page. To change the look of the page, just change anything in the
demarcated area.
--%>
<jsp:scriptlet>
Database.Cursor annotations = annotation.getCursor();
while (annotations.next(annotation) != null)
{
</jsp:scriptlet>
<%-- beginning of annotation change area --%>
<CENTER><HR WIDTH="100%"></CENTER>
From: <jsp:getProperty name="annotation" property="author" /></A>
at <jsp:getProperty name="annotation" property="whenPosted" /><BR>
<jsp:getProperty name="annotation" property="annotation" /><BR>
<%-- end of annotation change area --%>
<jsp:scriptlet>
}
annotations.close();
</jsp:scriptlet>
<!-- end of annotations -->
</BODY>
</HTML>
定制標(biāo)記等價(jià)程序清楚,但不提供信息:
清單10 定制標(biāo)記等價(jià)程序
<sql:results queryName="annotations" bean="annotation">
<CENTER><HR WIDTH="100%"></CENTER>
From: <jsp:getProperty name="annotation" property="author" /></A>
at <jsp:getProperty name="annotation" property="whenPosted" /><BR>
<jsp:getProperty name="annotation" property="annotation" /><BR>
</sql:results>
我們?cè)谶@個(gè)示例中使用scriptlet只是要讓您(一位程序員)知道正在發(fā)生的事情。如果用陳述性的標(biāo)記替換scriptlet,那么頁(yè)面設(shè)計(jì)者會(huì)很清楚,但您卻一頭霧水。
邏輯并不復(fù)雜。annotation.getCursor()調(diào)用能得到同服務(wù)器的連接、發(fā)出查詢并在結(jié)果集建立一個(gè)數(shù)據(jù)庫(kù)游標(biāo)對(duì)象annotations。每次調(diào)用annotations.next()時(shí),從結(jié)果集中取出一個(gè)新行,其中的值移到bean里,方法返回的正是這個(gè)bean的引用。所用的這個(gè)特殊的next()方法使用一個(gè)要植入的bean參數(shù)。雖然我們本可以使游標(biāo)為每一行實(shí)例化一個(gè)新的bean,但反復(fù)使用一個(gè)bean更加高效。
請(qǐng)注意真正的查詢及更新都沒(méi)有在表示頁(yè)面中出現(xiàn)。被包括的頁(yè)面設(shè)置表示頁(yè)面環(huán)境,也包括setProperty和update操作。這些操作獨(dú)立于表示頁(yè)面;只有注釋bean的屬性所包含的contract是重要的。這遵守了將表示與模式行為相分離的策略。頁(yè)面設(shè)計(jì)者完全有能力更改表示是如何呈現(xiàn)的,但無(wú)從得知數(shù)據(jù)庫(kù)是如何集成的。如果更改在數(shù)據(jù)庫(kù)更新或查詢時(shí)生效,就應(yīng)當(dāng)由JSP程序員負(fù)責(zé)。
2.7 總結(jié)
本文對(duì)結(jié)合使用Java Server Page、JavaBean和JDBC技術(shù)并通過(guò)關(guān)系數(shù)據(jù)庫(kù)生成動(dòng)態(tài)內(nèi)容的進(jìn)行了總結(jié)性介紹。我們從對(duì)于JSP程序員新手來(lái)說(shuō)最顯而易見(jiàn)的方法(scriptlet)開(kāi)始。我們看到不加控制的使用scriptlet是如何使邏輯和表示糾纏在一起的,使兩者都難以維護(hù)。我們還看到標(biāo)記庫(kù)并不一定會(huì)改善 MVC 分離,如果用編程術(shù)語(yǔ)來(lái)表示標(biāo)記,則頁(yè)面設(shè)計(jì)人員可能無(wú)法理解使用這樣的標(biāo)記的頁(yè)面。最后,我們看了更為復(fù)雜的示例,這些示例說(shuō)明了幾種使數(shù)據(jù)庫(kù)訪問(wèn)與內(nèi)容表示分離的途徑。
現(xiàn)在您應(yīng)該對(duì)在對(duì)頁(yè)面設(shè)計(jì)人員隱藏真實(shí)的數(shù)據(jù)庫(kù)訪問(wèn)的同時(shí)如何把數(shù)據(jù)庫(kù)內(nèi)容集成到一個(gè)Web站點(diǎn)中有一些基本概念。還請(qǐng)注意,對(duì)您(一個(gè)程序員)而言,幾乎不含信息的那些示例是最適合于頁(yè)面設(shè)計(jì)人員的示例。當(dāng)您為JSP解決方案制定計(jì)劃時(shí),千萬(wàn)要為頁(yè)面設(shè)計(jì)人員設(shè)身處地地想一想。
重慶大學(xué)本科學(xué)生畢業(yè)設(shè)計(jì)
智能道路交通信息管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
學(xué) 生:李小江
學(xué) 號(hào):20024417
指導(dǎo)教師:石 銳 副教授
專 業(yè):計(jì)算機(jī)科學(xué)與技術(shù)
重慶大學(xué)計(jì)算機(jī)學(xué)院
二OO六年六月
Graduation Design of Chongqing University
The Design and realization of The Online Intelligent Traffic MIS System
Undergraduate: Li Xiaojiang
Supervisor: Associate Prof. Shi?Rui
Major: Computer Science and Technology
College of Camputer
Chongqing University
June 2006
摘 要
伴隨著社會(huì)經(jīng)濟(jì)的發(fā)展,交通在人們經(jīng)濟(jì)和社會(huì)活動(dòng)中扮演著越來(lái)越重要的角色。因而,交通管理的水平和質(zhì)量就和我們的日產(chǎn)生活緊密相連,并且直接影響著投資的環(huán)境和城市的面貌。因此,每個(gè)城市都做了很多關(guān)于改善交通和發(fā)展智能交通系統(tǒng)(ITS)的思考。電子警察系統(tǒng)成為了一個(gè)非常重要的部分,它在提高安全系數(shù),警覺(jué)駕駛員的意識(shí),結(jié)束車輛闖紅燈和欄桿的顯現(xiàn)。
本次設(shè)計(jì)的這個(gè)信息管理系統(tǒng)是智能交通系統(tǒng)(ITS)的一個(gè)后臺(tái)子系統(tǒng)。它根據(jù)電子警察系統(tǒng)傳來(lái)的違章圖片信息,來(lái)處理違章信息。本系統(tǒng)可以幫助警察記錄和管理車輛的違章信息,并且可以將違章信息進(jìn)行公告、處罰,以便使道路交通更加暢通。本智能道路交通信息管理系統(tǒng)主要包括:違章信息錄入,違章信息公告,違章出發(fā),信息統(tǒng)計(jì)以及系統(tǒng)初始化和用戶管理等功能。
軟件的設(shè)計(jì)采用B/S模式進(jìn)行,用DreamWeaver MX開(kāi)發(fā)用戶界面,用JSP+JavaBean技術(shù)實(shí)現(xiàn)業(yè)務(wù)邏輯,同時(shí)以SQL Server2000作為后臺(tái)數(shù)據(jù)庫(kù)。
關(guān)鍵詞:管理信息系統(tǒng),違章處罰,智能交通,JSP,JavaBean
目 錄
中文摘要I
英文摘要II
1 引言1
2?智能交通系統(tǒng)介紹2
2.1 智能交通系統(tǒng)(ITS)概述2
2.2智能交通管理系統(tǒng)的應(yīng)用現(xiàn)狀及發(fā)展趨勢(shì)3
3 開(kāi)發(fā)方法、技術(shù)、工具4
3.1 系統(tǒng)的開(kāi)發(fā)方法4
3.2 開(kāi)發(fā)技術(shù)4
3.2.1動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)簡(jiǎn)介4
3.2.2 JSP技術(shù)簡(jiǎn)介4
3.3開(kāi)發(fā)工具5
3.3.1網(wǎng)頁(yè)制作工具Deamweaver MX20046
3.3.2 SQL6
3.3.3 Eclipse7
4 需求分析10
4.1 設(shè)計(jì)目標(biāo)10
4.2 智能道路交通信息系統(tǒng)描述10
4.2.1 功能模塊簡(jiǎn)單描述10
4.3 系統(tǒng)的數(shù)據(jù)流程分析12
4.3.1 數(shù)據(jù)流程分析概述12
4.4.2 數(shù)據(jù)流程圖12
5 數(shù)據(jù)庫(kù)系統(tǒng)及設(shè)計(jì)17
5.1 數(shù)據(jù)庫(kù)的引入17
5.2 數(shù)據(jù)庫(kù)E-R模型18
5.3 數(shù)據(jù)庫(kù)表結(jié)構(gòu)設(shè)計(jì)19
5.4 數(shù)據(jù)庫(kù)的完整性和安全性25
5.4.1 數(shù)據(jù)庫(kù)的完整性25
5.4.2 數(shù)據(jù)庫(kù)的安全性25
6 系統(tǒng)主要功能模塊的設(shè)計(jì)與實(shí)現(xiàn)26
6.1 系統(tǒng)設(shè)計(jì)概述26
6.1.1 系統(tǒng)設(shè)計(jì)的原則與內(nèi)容26
6.1.2 系統(tǒng)設(shè)計(jì)的基本方法26
6.2 系統(tǒng)主要功能模塊結(jié)構(gòu)設(shè)計(jì)27
6.2.1 系統(tǒng)主要功能模塊結(jié)構(gòu)27
6.2.2 用戶管理子系統(tǒng)27
6.2.3 用戶組管理子系統(tǒng)28
6.2.4 違章信息錄入子系統(tǒng)29
6.2.5 違章信息公告子系統(tǒng)32
6.2.6 違章處罰子系統(tǒng)32
6.2.7 信息統(tǒng)計(jì)子系統(tǒng)33
6.3系統(tǒng)重要的程序?qū)崿F(xiàn)簡(jiǎn)介36
6.3.1 數(shù)據(jù)庫(kù)的連接實(shí)現(xiàn)36
6.3.2 違章圖片存儲(chǔ)方式37
7 系統(tǒng)測(cè)試38
7.1 軟件測(cè)試的目的和原則38
7.2 系統(tǒng)測(cè)試39
7.2.1 JSP的中文亂碼問(wèn)題39
7.2.2 表單和表格打印問(wèn)題39
7.2.3 數(shù)據(jù)庫(kù)時(shí)間字段以及頁(yè)面中的時(shí)間顯示問(wèn)題39
7.3 軟件運(yùn)行與安裝40
7.3.1 J2EE應(yīng)用程序的構(gòu)建與部署40
7.3.2 具體運(yùn)行過(guò)程40
8 結(jié)論41
9 致謝43
參考文獻(xiàn)44
1 引言
當(dāng)前,我國(guó)正處于經(jīng)濟(jì)高速發(fā)展時(shí)期,城市交通速度發(fā)展較快,但從總體上看,形勢(shì)不容樂(lè)觀,交通道路及設(shè)施需求長(zhǎng)期持續(xù)增長(zhǎng),交通供給一直短缺,供需矛盾突出;受財(cái)力制約,交通基礎(chǔ)設(shè)施的建設(shè)速度難以適應(yīng)交通需求增長(zhǎng)的要求;汽車進(jìn)入家庭,使得本來(lái)就緊張的城市交通面臨著更大的困難;交通運(yùn)輸在能源消耗中所占的比重不斷增加,特別是對(duì)石油資源的依賴和消耗將進(jìn)一步加劇我國(guó)能源供給的結(jié)構(gòu)性矛盾;由于城市人口,特別是流動(dòng)人口急劇膨脹,使交通出行量大幅度增長(zhǎng);城市交通基礎(chǔ)設(shè)施的增長(zhǎng)速度落后于交通流量的增長(zhǎng);城市居民出行方式結(jié)構(gòu)不合理,公共交通呈萎縮狀態(tài);機(jī)動(dòng)車大幅度增長(zhǎng),與非機(jī)動(dòng)車混行,加劇了城市交通的緊張;城市交通的綜合治理有待于進(jìn)一步加強(qiáng);交通環(huán)境問(wèn)題日趨嚴(yán)重。主要表現(xiàn)以下兩個(gè)方面:
①交通基礎(chǔ)設(shè)施供應(yīng)嚴(yán)重不足,不能滿足交通發(fā)展的需求
隨著車輛保有量的高速增長(zhǎng),道路負(fù)荷增加,尤其在發(fā)展較快的城市交通基礎(chǔ)設(shè)施,包括汽車及自行車行駛的道路、人行道、人行橫道等都嚴(yán)重不足。以廣州為例,改革開(kāi)放以來(lái),廣州市城市道路面積與總長(zhǎng)度都有了大幅度增長(zhǎng),自1990年以來(lái),兩者的增長(zhǎng)率分別是13.87%和12.82%,但仍然低于機(jī)動(dòng)車的年均增長(zhǎng)率25.4%。又以北京市為例,機(jī)動(dòng)車已于2003年8月初突破了200萬(wàn)輛,預(yù)測(cè)到2010年,這個(gè)數(shù)字將有可能達(dá)到380萬(wàn),其中家用轎車為280萬(wàn),平均每個(gè)家庭擁有汽車0.53輛,而2015年機(jī)動(dòng)車保有量將達(dá)到500萬(wàn)-600萬(wàn)輛之間,雖然與發(fā)達(dá)國(guó)家同等規(guī)模的城市相比機(jī)動(dòng)車總量少得多,但高峰時(shí)其機(jī)動(dòng)車的平均時(shí)速只有十幾公里,交通擁堵現(xiàn)象十分嚴(yán)重,給居民出行帶來(lái)了極大不便。
②交通管理水平低,交通需求管理不善
隨著經(jīng)濟(jì)的發(fā)展,我國(guó)交通擁堵的頻率和時(shí)間明顯增加,導(dǎo)致車輛運(yùn)動(dòng)速度降低,加速、減速、怠速頻繁,運(yùn)行工況惡化。研究調(diào)查表明,北京與廣州市區(qū)的平均車速僅在23km/h左右,機(jī)動(dòng)車低速運(yùn)行時(shí)間加長(zhǎng);而在早晚的高峰期,北京市區(qū)道路平均車速不足20km/h。
2 智能交通系統(tǒng)介紹
2.1 智能交通系統(tǒng)(ITS)概述
我國(guó)城市交通面臨巨大的挑戰(zhàn),而其對(duì)策主要是規(guī)劃及政策手段、工程設(shè)施
建設(shè)手段、運(yùn)行管理手段,以及采用高新技術(shù)改造傳統(tǒng)交通運(yùn)輸系統(tǒng)的手段,智能交通系統(tǒng)(ITS -Intelligent Transportation System)是解決上述矛盾的有效途徑。智能交通系統(tǒng)處于當(dāng)今世界上交通運(yùn)輸科技的前沿,它是在較完善的道路設(shè)施基礎(chǔ)上,將先進(jìn)的電子技術(shù)、信息技術(shù)(IT)、人工智能(AI)、地理信息(GIS)、影像、計(jì)算機(jī)技術(shù)、有線/無(wú)線通信(如ATM,GPS,GPRS,GSM,TETRA)、傳感器技術(shù)和系統(tǒng)工程技術(shù)集成運(yùn)用于地面運(yùn)輸?shù)膶?shí)際需求,建立起全方位、實(shí)時(shí)準(zhǔn)確、高效的地面交通系統(tǒng),能對(duì)各種交通方式進(jìn)行現(xiàn)代化、科學(xué)化的智能管理。智能交通系統(tǒng)的出現(xiàn)是為了能夠改善混亂的交通狀況,減少擁堵,提高運(yùn)輸效率并提高交通的安全性,對(duì)于交通環(huán)境的改善則是隨著在實(shí)踐中的應(yīng)用而被提出的.在人類生存環(huán)境受到嚴(yán)重威脅的今天,積極開(kāi)發(fā)ITS對(duì)于改善環(huán)境有著獨(dú)特的意義。
首先,ITS給出行者提供可靠的交通信息,在家中或在其它任何地方的人均可使用個(gè)人出行幫助系統(tǒng)來(lái)獲取自己所需的相關(guān)信息,以幫助他選擇出符合其出行預(yù)算和時(shí)間要求的交通工具與出行路線。導(dǎo)航系統(tǒng)將引導(dǎo)司機(jī)到達(dá)目的地,司機(jī)將不斷地接收到前方有關(guān)交通狀況的信息。司機(jī)與外界完全相通,出行變得容易、安全和舒適。交通信息數(shù)字化很容易與其他服務(wù)系統(tǒng)一體化,在進(jìn)入一個(gè)城市前,司機(jī)被預(yù)先告之停車場(chǎng)位置以及如何與公交相接,他可以預(yù)定停車位;其移動(dòng)通訊可以直接進(jìn)入Internet網(wǎng),自動(dòng)訪問(wèn)所選擇服務(wù)(如餐、旅館等)的站點(diǎn)另外,通過(guò)與相鄰交通區(qū)域信息的交換,交通管理水平將會(huì)有很大提高,減少了由于缺乏信息而造成的不必要的延誤與等待。
其次,提供引導(dǎo)信息,大幅度減少交通阻塞,提高交通安全。與ITS控制中心相連的路況監(jiān)控設(shè)備對(duì)路網(wǎng)交通狀況進(jìn)行實(shí)時(shí)監(jiān)控,借助人工智能的幫助,控制中心將所連續(xù)監(jiān)控的路網(wǎng)信息進(jìn)行整合處理,從而提出整個(gè)路網(wǎng)的優(yōu)化運(yùn)行方案。與此同時(shí),司機(jī)接收到與路網(wǎng)優(yōu)化運(yùn)行方案相應(yīng)的引導(dǎo)信息,他可以根據(jù)引導(dǎo)信息選擇的行車路線,避開(kāi)行車擁擠的路段,選擇快捷的行車路線,從而大幅度提高現(xiàn)有路網(wǎng)基礎(chǔ)設(shè)施的使用效率和安全性。
2.2智能交通管理系統(tǒng)的應(yīng)用現(xiàn)狀及發(fā)展趨勢(shì)
隨著改革開(kāi)放的不斷深入、經(jīng)濟(jì)的高速發(fā)展,人民生活水平的日益提高,各大城市的機(jī)動(dòng)車輛和駕駛?cè)藛T數(shù)量急劇增加。由于道路建設(shè)的速度遠(yuǎn)遠(yuǎn)趕不上機(jī)動(dòng)車輛和駕駛?cè)藛T的增長(zhǎng)速度,從而導(dǎo)致交通擁擠、違章嚴(yán)重、道路交通事故時(shí)有發(fā)生,嚴(yán)重影響了市民出行和企事業(yè)單位的生產(chǎn)及公務(wù)活動(dòng)。
除了加強(qiáng)道路建設(shè)外,利用先進(jìn)的科學(xué)技術(shù)、樹(shù)立先進(jìn)的管理觀念,在現(xiàn)有的道路交通設(shè)施基礎(chǔ)上,進(jìn)行城市交通的科學(xué)化、規(guī)范化管理,建設(shè)現(xiàn)代化的交通指揮中心和管理系統(tǒng)是投資少、見(jiàn)效快的好辦法。
智能道路交通信息管理系統(tǒng)的主要成分就是電子警察系統(tǒng)電子警察是“智能電子警察監(jiān)測(cè)系統(tǒng)”的簡(jiǎn)稱,它是一套高科技電子設(shè)備,最初是為維護(hù)交通執(zhí)法提供了一種先進(jìn)手段。以往許多城市在某些交通場(chǎng)合,由于沒(méi)有有效的執(zhí)法手段造成執(zhí)法困難,例如:無(wú)人值守的路口;單行線;禁行、限時(shí)道路;限車型車道;主、輔路進(jìn)出口;緊急停車帶;公交專用道;違章 超速等場(chǎng)合檢查執(zhí)法困難,特別是在夜間,違章行車現(xiàn)象經(jīng)常發(fā)生,嚴(yán)重破壞了交通秩序。該設(shè)備能夠?qū)`章車輛進(jìn)行自動(dòng)判斷與圖像記錄。執(zhí)法部門(mén)可以根據(jù)該系統(tǒng)所提供的車輛違章過(guò)程的圖像記錄,對(duì)違章司機(jī)進(jìn)行追究和處罰。
幾年來(lái),各大中城市均在此方面做過(guò)有益的嘗試,但使用情況總的來(lái)并不理想。主要原因是現(xiàn)有的電子警察抓拍設(shè)備存在許多缺陷,限制了它發(fā)揮更大的作用。從目前市場(chǎng)情況來(lái)看,還沒(méi)有哪一家公司提供的系統(tǒng)和設(shè)備能夠真正滿足用戶期望,用戶對(duì)系統(tǒng)現(xiàn)狀也看法各異。電子警察設(shè)備具有非常廣闊的前景,但現(xiàn)階段在設(shè)備選型方面卻難度很大。
本次畢業(yè)設(shè)計(jì)的主要任務(wù)完成智能道路交通信息管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。本系統(tǒng),通過(guò)對(duì)電子警察系統(tǒng)抓拍到的違章車輛的圖像信息進(jìn)行有效管理,達(dá)到懲戒違章司機(jī),改善交通路口混亂,減少因交通違章造成的人為塞車和事故,提高交通執(zhí)法的準(zhǔn)確性和效率,節(jié)省警力并提高城市道路交通效率的目的。
本系統(tǒng)包括四部分功能:①違章車輛圖像信息的錄入;②違章車輛信息的查詢統(tǒng)計(jì);③違章車輛信息的公告與處罰;④信息管理系統(tǒng)的維護(hù)與設(shè)置。
3 開(kāi)發(fā)方法、技術(shù)、工具
3.1 系統(tǒng)的開(kāi)發(fā)方法
智能道路交通信息管理系統(tǒng),根據(jù)其需求的要求和特點(diǎn),采用在B/S模式下開(kāi)發(fā),在開(kāi)發(fā)過(guò)程中采用面向?qū)ο蟮南到y(tǒng)開(kāi)發(fā)方法進(jìn)行系統(tǒng)開(kāi)發(fā),根據(jù)系統(tǒng)的特性按照結(jié)構(gòu)化程序設(shè)計(jì)思想與面向?qū)ο蟮脑O(shè)計(jì)思想和方法相結(jié)合的方式來(lái)進(jìn)行系統(tǒng)設(shè)計(jì)。
依據(jù)系統(tǒng)的總體功能,將系統(tǒng)劃分成多個(gè)模塊進(jìn)行獨(dú)立的實(shí)現(xiàn),根據(jù)各個(gè)模塊的不同情況進(jìn)行具體的分析和設(shè)計(jì),最后對(duì)各個(gè)模塊進(jìn)行整合,建立一個(gè)統(tǒng)一模塊來(lái)實(shí)現(xiàn)各個(gè)模塊之間消息的傳遞、相互的協(xié)助,以及整體功能的完全展現(xiàn)。
3.2 開(kāi)發(fā)技術(shù)
3.2.1動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)簡(jiǎn)介
在B/S模式下操作Web數(shù)據(jù)庫(kù)是通過(guò)數(shù)據(jù)庫(kù)的網(wǎng)絡(luò)技術(shù)ASP、JSP等實(shí)現(xiàn)的,這就要用到動(dòng)態(tài)網(wǎng)頁(yè)的技術(shù)。動(dòng)態(tài)網(wǎng)頁(yè)即使在網(wǎng)頁(yè)文件中加入腳本語(yǔ)言動(dòng)態(tài)的執(zhí)行用戶的請(qǐng)求。
傳統(tǒng)的靜態(tài)網(wǎng)頁(yè)既是用HTML語(yǔ)言編寫(xiě)的網(wǎng)頁(yè)文件格式,文件擴(kuò)展名為.htm或.html,當(dāng)用戶請(qǐng)求該頁(yè)的時(shí)候服務(wù)器便將此頁(yè)下載到客戶端的瀏覽器顯示出來(lái)。而動(dòng)態(tài)的網(wǎng)頁(yè)中嵌入了部分程序代碼,當(dāng)用戶請(qǐng)求該頁(yè)的時(shí)候Web服務(wù)器會(huì)將此頁(yè)傳遞給Web應(yīng)用程序服務(wù)器,應(yīng)用程序服務(wù)器根據(jù)用戶提供的參數(shù)處理程序代碼,轉(zhuǎn)化為相應(yīng)的HTML代碼,返回給Web服務(wù)器,再下載到客戶端瀏覽器顯示。
3.2.2 JSP技術(shù)簡(jiǎn)介
JSP(Java Server Pages)是一種運(yùn)行于Web服務(wù)器端的腳本語(yǔ)言,是開(kāi)發(fā)Web動(dòng)態(tài)網(wǎng)頁(yè)快速而有效的工具,是基于java語(yǔ)言的Web開(kāi)發(fā)技術(shù)中最具有代表性的解決方案。JSP是基于Java的腳本技術(shù),可用于創(chuàng)建跨平臺(tái)、跨Web服務(wù)器的動(dòng)態(tài)網(wǎng)頁(yè)。使用JSP不僅能夠制作像HTML一樣的靜態(tài)網(wǎng)頁(yè),還能制作包括動(dòng)態(tài)數(shù)據(jù)的網(wǎng)頁(yè)。
要開(kāi)發(fā)JSP文件,必須要有Web服務(wù)器和瀏覽器、應(yīng)用程序服務(wù)器、數(shù)據(jù)庫(kù)連接驅(qū)動(dòng)和Java編程環(huán)境。
①Web服務(wù)器
在Internet上,Web服務(wù)器為客戶提供信息服務(wù),服務(wù)器的基本信息單位稱為網(wǎng)頁(yè)(Web頁(yè)),由HTML寫(xiě)成。客戶端使用稱為瀏覽器的軟件顯示HTML文檔的內(nèi)容??蛻舳撕头?wù)器之間使用超文本傳輸協(xié)議(HTTP,HyperText Transfer Protocol)傳送信息。HTTP協(xié)議是實(shí)現(xiàn)Web服務(wù)器和瀏覽器之間的通信、交流信息的協(xié)議。當(dāng)用戶激活一個(gè)鏈接后,服務(wù)器使用HTTP協(xié)議送回約定好的格式文件,文件信息在客戶端上通過(guò)瀏覽器顯示相應(yīng)的信息。如果服務(wù)器和瀏覽器都遵守HTTP協(xié)議,則任何一個(gè)瀏覽器和服務(wù)之間都能夠進(jìn)行通信。
目前廣泛使用的Web服務(wù)器有IIS、Apache,瀏覽器有Interent Explorer、Netscape等,我在設(shè)計(jì)和調(diào)試中使用的Web服務(wù)器是Apathe,瀏覽器是Interent Explorer 6.0。
②應(yīng)用程序服務(wù)器
應(yīng)用程序服務(wù)器既是用來(lái)處理程序代碼的服務(wù)器,它將網(wǎng)頁(yè)文件中的Java語(yǔ)言代碼根據(jù)用戶提供的參數(shù)進(jìn)行處理并返回給Web服務(wù)器。
目前廣泛使用的Java腳本應(yīng)用程序服務(wù)器有Tomcat、Jboss等,我使用的是Apthe Tomcat 4.1。
③數(shù)據(jù)庫(kù)驅(qū)動(dòng)
數(shù)據(jù)庫(kù)驅(qū)動(dòng)既是連接數(shù)據(jù)源的驅(qū)動(dòng),像系統(tǒng)的ODBC、JDBC等,我在設(shè)計(jì)的時(shí)候是使用JDBC-ODBC橋接器來(lái)連接數(shù)據(jù)源。
④Java編程環(huán)境
因?yàn)镴SP是Java腳本語(yǔ)言技術(shù),當(dāng)然在開(kāi)發(fā)的時(shí)候需要有Java的編程環(huán)境,目前用得最多的就是J2sdk,我在設(shè)計(jì)中使用的是SUN公司的j2sdk-1_5_0_5-windows-i586-p。
JSP是用Java語(yǔ)言寫(xiě)成的,Java語(yǔ)言具有跨平臺(tái)的特性,所以JSP最適合于編寫(xiě)服務(wù)器端執(zhí)行的程序。加上JSP可以結(jié)合靜態(tài)的HTML語(yǔ)法,使得JSP的設(shè)計(jì)方式簡(jiǎn)潔而直觀。
3.3 開(kāi)發(fā)工具
隨著計(jì)算機(jī)在信息系統(tǒng)中的廣泛應(yīng)用,對(duì)各種軟件工具的研究十分迅速,各種各樣的軟件及程序的自動(dòng)設(shè)計(jì)、生成工具日新月異,為各種信息系統(tǒng)的開(kāi)發(fā)提供了強(qiáng)有力的技術(shù)支持和方便的實(shí)用手段。利用這些軟件生成工具,可以大量減少手工編程環(huán)節(jié)的工作,避免各種編程錯(cuò)誤,極大地提高系統(tǒng)的開(kāi)發(fā)效率。一般來(lái)說(shuō),比較流行的工具有:一般編程語(yǔ)言工具、數(shù)據(jù)庫(kù)系統(tǒng)工具、程序生成工具、專用系統(tǒng)生成工具、及面向?qū)ο缶幊痰取?/p>
本系統(tǒng)采用HTML+JSP++JavaBean+SQLServer2000進(jìn)行B/S模式下的B端的界面的開(kāi)發(fā),以及的S端的業(yè)務(wù)處理邏輯程序的實(shí)現(xiàn)和后臺(tái)數(shù)據(jù)庫(kù)的開(kāi)發(fā)。在開(kāi)發(fā)的過(guò)程中使用了Deamweaver MX 2004、Eclipse3.1、Tomcat 4.1、SQLServer2000等開(kāi)發(fā)工具。
3.3.1網(wǎng)頁(yè)制作工具Deamweaver MX2004
當(dāng)前流行的網(wǎng)頁(yè)制作工具有很多,它們也都有各自的特點(diǎn)。出于沒(méi)有網(wǎng)頁(yè)制作經(jīng)驗(yàn)和方便站點(diǎn)管理方面的考慮,我載設(shè)計(jì)中選擇了Deamweaver MX 2004中文版這款開(kāi)發(fā)工具。它很容易上手,并且對(duì)站點(diǎn)的管理非常的方便。
①建立一個(gè)Deamweaver站點(diǎn):安裝完成后啟動(dòng)Deamweaver MX 2004中文版,選擇“站點(diǎn)”>“管理站點(diǎn)”,出現(xiàn)“管理站點(diǎn)”對(duì)話框;單擊“新建”按鈕,出現(xiàn)“站點(diǎn)定義”對(duì)話框;單擊“基本”選項(xiàng)卡以使用“站點(diǎn)定義向?qū)А?,它將引?dǎo)您逐步完成設(shè)置過(guò)程;單擊“高級(jí)”選項(xiàng)卡以使用“高級(jí)”設(shè)置,它使您可以根據(jù)需要分別設(shè)置本地、遠(yuǎn)程和測(cè)試文件夾。
②代碼設(shè)計(jì)和視圖設(shè)計(jì)的分離。Deamweaver將代碼的設(shè)計(jì)和視圖的設(shè)計(jì)分開(kāi),可以在視圖設(shè)計(jì)時(shí)很快捷的設(shè)計(jì)出很美觀大方的界面,并在這個(gè)界面下能很好的進(jìn)行代碼的設(shè)計(jì)。
3.3.2 SQL
SQL是一種綜合的、通用的、功能極強(qiáng)的關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言(關(guān)系數(shù)據(jù)庫(kù)是所有用戶可見(jiàn)的數(shù)據(jù)都嚴(yán)格按表的形式組織起來(lái)的表,且所有庫(kù)操作都針對(duì)這些表的數(shù)據(jù)庫(kù)),它包括數(shù)據(jù)定義(Definition)、數(shù)據(jù)操縱(Manipulate)、數(shù)據(jù)管理(Management)、存取保護(hù)(Access Protection)、處理控制(Control)等多種功能。利用表(table)、索引(index)、碼(keys)、行(rows)、列(columns)等來(lái)確定存儲(chǔ)位置。
SQL語(yǔ)言本身并不是一個(gè)很完整的編程語(yǔ)言,例如它不支持流控制等。一般它都與其他編程語(yǔ)言(如DELPHI、PowerBuilder、VB、PB、JAVA等)結(jié)合來(lái)使用。
SQL的主要特點(diǎn)在于:
①一體化的特點(diǎn)
SQL語(yǔ)言能完成定義關(guān)系模式,錄入數(shù)據(jù)以建立數(shù)據(jù)庫(kù)、查詢、更新、維護(hù)、數(shù)據(jù)庫(kù)重構(gòu)、數(shù)據(jù)庫(kù)安全控制等一系列操作要求,用SQL可以實(shí)現(xiàn)數(shù)據(jù)庫(kù)生命期當(dāng)中的全部活動(dòng)。由于關(guān)系模型中實(shí)體與實(shí)體間的聯(lián)系都是用關(guān)系來(lái)表示,這種數(shù)據(jù)結(jié)構(gòu)的單一性保證了操作符的單一性。
②統(tǒng)一的語(yǔ)法結(jié)構(gòu),多種使用方式
SQL有兩種使用方式,一種是聯(lián)機(jī)使用方式,另一種是嵌入程序方式。大多數(shù)的程序接口都采用嵌入的SQL語(yǔ)言。雖然使用方式不同,SQL語(yǔ)言的語(yǔ)法結(jié)構(gòu)是一致的。這使得用戶與程序員之間的通信得以改善。
③高度非過(guò)程化
在SQL中,只需用戶提出“干什么”,而無(wú)須指出“怎么干”,存取路徑的選擇和SQL語(yǔ)句操作的過(guò)程由系統(tǒng)自動(dòng)完成。
④語(yǔ)言簡(jiǎn)潔
SQL語(yǔ)言十分簡(jiǎn)潔,語(yǔ)法簡(jiǎn)單。標(biāo)準(zhǔn)SQL中,完成核心功能只用了6個(gè)動(dòng)詞(CREATE、INSERT、UPDATE、DELETE、SELECT、GRANT)因此簡(jiǎn)單易學(xué)。
⑤瀏覽器/服務(wù)器(B/S)結(jié)構(gòu)
SQL能使應(yīng)用程序采取瀏覽器/服務(wù)器結(jié)構(gòu)。交互式查詢、報(bào)表打印和應(yīng)用程序稱為數(shù)據(jù)庫(kù)的“前端”,在個(gè)人機(jī)上運(yùn)行,存儲(chǔ)和數(shù)據(jù)管理的后端數(shù)據(jù)庫(kù)引擎在服務(wù)器上運(yùn)行,在此情況下,SQL作為用于用戶交互的前端工具和用于數(shù)據(jù)庫(kù)管理的后端引擎之間通信的橋梁。
⑥支持異類復(fù)制
它可以將SQL Server數(shù)據(jù)復(fù)制到其他的數(shù)據(jù)庫(kù)中,包括Access、Oracle、Sybase和DB2,并采用ODBC作為其連接機(jī)制。
⑦Internet數(shù)據(jù)庫(kù)功能集成
支持?jǐn)?shù)據(jù)庫(kù)信息自動(dòng)發(fā)布到HTML文檔,同時(shí)結(jié)合Microsoft Internet Information Server和SQL Server Internet Connector這兩個(gè)產(chǎn)品/技術(shù),使用戶得到完整的Internet數(shù)據(jù)發(fā)布的能力。
3.3.3 Eclipse
Eclipse這樣功能完整且成熟的開(kāi)發(fā)環(huán)境,是由藍(lán)色巨人IBM所釋出。IBM花了4千萬(wàn)美金來(lái)開(kāi)發(fā)這個(gè)IDE(Integrated Development Environment)。第一版1.0在2001年11月釋出,隨后逐漸受到歡迎。
Eclipse的主要特點(diǎn)在于:
①開(kāi)放的可擴(kuò)展的IDE
Eclipse平臺(tái)是一個(gè)開(kāi)放的可擴(kuò)展的IDE。Eclipse平臺(tái)是建造模塊和構(gòu)造并運(yùn)行集成軟件開(kāi)發(fā)工具的基礎(chǔ)。Eclipse平臺(tái)允許工具建造者獨(dú)立開(kāi)發(fā)與其他工具無(wú)縫集成的工具,用戶甚至無(wú)須去分辨一個(gè)工具功能在哪里結(jié)束、而另一個(gè)工具功能在哪里開(kāi)始。
②成功的底層圖形界面API
從Java誕生至今,已經(jīng)在太多的領(lǐng)域取得成功,然而它卻很少在圖形界面程序上嶄露頭角。究其原因,Java語(yǔ)言缺省的圖形界面開(kāi)發(fā)包AWT和SWING實(shí)在是難辭其咎,無(wú)論速度和外觀,它們都難以讓人接受。如今,Eclipse組織編寫(xiě)的SWT開(kāi)發(fā)包,為Java程序員提供了AWT和SWING之外的一個(gè)更佳的選擇。
SWT本身僅僅是Eclipse組織為了開(kāi)發(fā)Eclipse集成開(kāi)發(fā)環(huán)境所編寫(xiě)的一組底層圖形界面API?;蛟S是無(wú)心插柳,又或是有意為之,至今為止,SWT無(wú)論是在性能和外觀上,都超越了Sun公司提供的AWT和SWING。目前Eclipse IDE已經(jīng)開(kāi)發(fā)到了2.1版本,SWT已經(jīng)十分穩(wěn)定。
③強(qiáng)大的插件加載功能
可以通過(guò)不斷地加載插件來(lái)實(shí)現(xiàn)同其他制品的合作。整個(gè)Eclipse體系結(jié)構(gòu)就像一個(gè)大拼圖,可以不斷地向上加插件,同時(shí),現(xiàn)有插件上還可以再加插件,進(jìn)而實(shí)現(xiàn)功能的擴(kuò)展。目前,Eclipse已經(jīng)開(kāi)始提供C語(yǔ)言開(kāi)發(fā)的功能插件。更難能可貴的,Eclipse是一個(gè)開(kāi)放源代碼的項(xiàng)目,任何人都可以下載Eclipse的源代碼,并且在此基礎(chǔ)上開(kāi)發(fā)自己的功能插件。也就是說(shuō)未來(lái)只要有人需要,就會(huì)有建立在Eclipse之上的COBOL,Perl,Python等語(yǔ)言的開(kāi)發(fā)插件出現(xiàn)。同時(shí)可以通過(guò)開(kāi)發(fā)新的插件擴(kuò)展現(xiàn)有插件的功能,比如在現(xiàn)有的Java開(kāi)發(fā)環(huán)境中加入Tomcat服務(wù)器插件??梢詿o(wú)限擴(kuò)展,而且有著統(tǒng)一的外觀、操作和系統(tǒng)資源管理,這也正是Eclipse的潛力所在。
④可以通過(guò)導(dǎo)入一些CVS相關(guān)的插件來(lái)實(shí)現(xiàn)版本管理的便易性
Eclipse平臺(tái)提供了對(duì)于直接從工作區(qū)進(jìn)行團(tuán)隊(duì)開(kāi)發(fā)操作的支持。這種支持允許開(kāi)發(fā)人員并發(fā)地與幾個(gè)獨(dú)立的資源庫(kù)以及不同版本的代碼或項(xiàng)目進(jìn)行交互。工作區(qū)中的資源允許團(tuán)隊(duì)支持組件處理版本和配置管理問(wèn)題。當(dāng)然,單個(gè)工作區(qū)也可以同時(shí)訪問(wèn)不同類型的資源庫(kù)。Eclipse平臺(tái)并沒(méi)有提供它自己的代碼管理解決方案,它總是依靠外部系統(tǒng)。Eclipse平臺(tái)只對(duì)一個(gè)(但也是最流行的一個(gè))源代碼管理系統(tǒng)提供內(nèi)置支持——并發(fā)版本控制系統(tǒng)CVS。
Eclipse提供了強(qiáng)大的個(gè)人版本管理機(jī)制,每一次被保存的更改都可以得到恢復(fù),而且可以精確到每一個(gè)方法的版本恢復(fù)。操作也十分方便,在任何一個(gè)能看到所要操作文件的觀察窗口中,例如資源瀏覽窗口,選中該文件,單擊右鼠標(biāo)鍵,選擇Compare with或Replace with即可。如果是恢復(fù)已經(jīng)被刪除的方法,則可以選擇Add from local history,之后相應(yīng)的本地歷史記錄就會(huì)顯示出來(lái),按照用戶本人的需求找到相應(yīng)的版本就可以了。強(qiáng)大的個(gè)人版本管理功能為程序員提供了更多的信心——只管編下去,任何不小心的錯(cuò)誤都可以恢復(fù)到從前的狀況,在Eclipse下開(kāi)發(fā),是有“后悔藥”的!
⑤充分的幫助文件
值得提出的是,在下載了Eclipse的多國(guó)語(yǔ)言翻譯包之后,所有的菜單和聯(lián)機(jī)幫助都已經(jīng)翻譯成了中文,使用起來(lái)非常方便。
4 需求分析
4.1 設(shè)計(jì)目標(biāo)
該軟件必須盡量達(dá)到人力與設(shè)備費(fèi)用的節(jié)省,能夠最大限度的利用現(xiàn)有資源,降低系統(tǒng)開(kāi)發(fā)費(fèi)用,并且使軟件的數(shù)據(jù)處理速度和效率有明顯提高,降低人員工作負(fù)擔(dān)。完成軟件的設(shè)計(jì),實(shí)現(xiàn)本系統(tǒng)滿足用戶的需求?;竟δ艿穆钥s用例描述如下所示:
圖4.1系統(tǒng)簡(jiǎn)要用例圖
4.2 智能道路交通信息系統(tǒng)描述
4.2.1 功能模塊簡(jiǎn)單描述
智能道路交通信息管理系統(tǒng),在權(quán)限方面主要是分為兩部分,普通用戶和系統(tǒng)管理員。系統(tǒng)管理員通過(guò)增加,修改,刪除,用戶或用戶組,來(lái)創(chuàng)建和管理不同權(quán)限組,以及不同的用戶;同時(shí)系統(tǒng)管理員也可以具有一般用戶能具有的一切權(quán)限。普通用戶通過(guò)用戶帳號(hào)和密碼登陸該系統(tǒng)后,可以進(jìn)行系統(tǒng)工作所要求的一些標(biāo)準(zhǔn)設(shè)置的增加,修改,查詢,刪除(如支隊(duì)管理,大隊(duì)管理,違章行為管理等);也可以根據(jù)他的權(quán)限進(jìn)行相應(yīng)的處理(如信息錄入、公告、處罰、統(tǒng)計(jì),打印等)。該系統(tǒng)可大致分為下表所示的模塊:
4.3 系統(tǒng)的數(shù)據(jù)流程分析
4.3.1 數(shù)據(jù)流程分析概述
數(shù)據(jù)流程的分析是對(duì)業(yè)務(wù)流程分析的深化,主要工作是隱去實(shí)物流,抽象出信息流,繪制出數(shù)據(jù)流程。并對(duì)各種數(shù)據(jù)的屬性和各項(xiàng)處理功能,進(jìn)行詳盡的數(shù)據(jù)分析,為下一步的程序設(shè)計(jì)做準(zhǔn)備。
數(shù)據(jù)流程分析要求弄清這些流動(dòng)數(shù)據(jù)的屬性、存儲(chǔ)情況和對(duì)數(shù)據(jù)的查詢要求,并給與定量的描述和分析。其中包括:
①繪制數(shù)據(jù)流程圖:它是分析階段所提供的重要的技術(shù)文件之一,反映了系統(tǒng)內(nèi)部的數(shù)據(jù)傳遞關(guān)系。是對(duì)系統(tǒng)的一種抽象和概念化,它只表示數(shù)據(jù)、功能之間的關(guān)系,不涉及如何實(shí)現(xiàn)。
②數(shù)據(jù)分析:其目的是弄清數(shù)據(jù)流程圖中、出現(xiàn)的各種數(shù)據(jù)的屬性,存儲(chǔ)情況和查詢的要求,對(duì)數(shù)據(jù)予以定量的描述和分析。數(shù)據(jù)分類是指對(duì)數(shù)據(jù)項(xiàng)予以定義,并根據(jù)總的屬性將數(shù)據(jù)項(xiàng)歸納到其應(yīng)有的類目中去。
③數(shù)據(jù)屬性分析:根據(jù)其屬性可以正確的確定數(shù)據(jù)與文件的關(guān)系,通常是具有固定屬性的數(shù)據(jù)存放在主文件中,把具有變動(dòng)屬性的數(shù)據(jù)存放在周轉(zhuǎn)文件或處理文件中。
4.3.2 數(shù)據(jù)流程圖
管理業(yè)務(wù)調(diào)查過(guò)程中的管理業(yè)務(wù)流程圖形象地表達(dá)了人事管理過(guò)程中信息流動(dòng)和存儲(chǔ)的過(guò)程,但仍舊包含了一些物理內(nèi)容,要實(shí)現(xiàn)計(jì)算機(jī)網(wǎng)絡(luò)進(jìn)行信息管理,還必須進(jìn)一步舍去物質(zhì)因素,收集相關(guān)資料,繪制系統(tǒng)的數(shù)據(jù)流程圖。數(shù)據(jù)流程圖能精確地在邏輯上描述系統(tǒng)的輸入、輸出和數(shù)據(jù)存儲(chǔ)等功能,是描述管理信息系統(tǒng)邏輯模型的最主要的工具。
5 數(shù)據(jù)庫(kù)系統(tǒng)及設(shè)計(jì)
數(shù)據(jù)庫(kù)設(shè)計(jì)是管理信息系統(tǒng)設(shè)計(jì)的核心。數(shù)據(jù)庫(kù)設(shè)計(jì)是在一個(gè)給定的應(yīng)用環(huán)境下,構(gòu)造最優(yōu)的數(shù)據(jù)模式、建立起數(shù)據(jù)庫(kù),使之能有效地存儲(chǔ)數(shù)據(jù),同時(shí)構(gòu)造出應(yīng)用系統(tǒng)以支持各種應(yīng)用的信息處理需求。
5.1 數(shù)據(jù)庫(kù)的引入
數(shù)據(jù)庫(kù)技術(shù)從60年代中期至今只有不到40年的歷史,但其發(fā)展速度之快是其它技術(shù)所不及的。它已由第一代的層次型、網(wǎng)狀型數(shù)據(jù)庫(kù),第二代的關(guān)系型數(shù)據(jù)庫(kù)發(fā)展到今天以面向?qū)ο鬄橹饕P偷臄?shù)據(jù)庫(kù),即第三代數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)技術(shù)和網(wǎng)絡(luò)通信技術(shù)、面向?qū)ο缶幊碳夹g(shù)、并行計(jì)算機(jī)技術(shù)、人工智能技術(shù)相互融合、相互滲透,促進(jìn)了數(shù)據(jù)庫(kù)技術(shù)的廣泛應(yīng)用。
數(shù)據(jù)庫(kù)(Database),是按照數(shù)據(jù)結(jié)構(gòu)來(lái)組織、存儲(chǔ)和管理數(shù)據(jù)的倉(cāng)庫(kù),是用于查詢的大量數(shù)據(jù)的存儲(chǔ)區(qū)域。使用數(shù)據(jù)庫(kù)可以帶來(lái)許多好處:如減少了數(shù)據(jù)的冗余度,從而大大地節(jié)省了數(shù)據(jù)的存儲(chǔ)空間,實(shí)現(xiàn)數(shù)據(jù)資源的充分共享等等。此外,數(shù)據(jù)庫(kù)技術(shù)還為用戶提供了非常簡(jiǎn)便的使用手段,使用戶易于編寫(xiě)有關(guān)數(shù)據(jù)庫(kù)應(yīng)用程序。特別是近年來(lái)推出的計(jì)算機(jī)關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),操作直觀,使用靈活,編程方便,功能強(qiáng)大,環(huán)境適應(yīng)廣泛,數(shù)據(jù)處理能力極強(qiáng)。
數(shù)據(jù)庫(kù)的設(shè)計(jì)是指對(duì)一個(gè)給定的應(yīng)用環(huán)境,構(gòu)造數(shù)據(jù)庫(kù)模式,建立數(shù)據(jù)庫(kù)及其應(yīng)用系統(tǒng),滿足各種用戶需求。作為信息資源開(kāi)發(fā)、管理和服務(wù)的一種有效的手段,數(shù)據(jù)庫(kù)技術(shù)的應(yīng)用已越來(lái)越廣泛,從小型的單項(xiàng)事務(wù)處理系統(tǒng)到大型的信息系統(tǒng)大都用先進(jìn)的數(shù)據(jù)庫(kù)技術(shù)來(lái)保持系統(tǒng)數(shù)據(jù)的安全性、完整性和共享性。對(duì)一個(gè)實(shí)際的系統(tǒng)來(lái)說(shuō),數(shù)據(jù)庫(kù)表的設(shè)計(jì)在遵循數(shù)據(jù)庫(kù)理論的同時(shí),必須能用開(kāi)發(fā)工具來(lái)實(shí)現(xiàn)用戶在各方面提出的功能要求。
6 系統(tǒng)主要功能模塊的設(shè)計(jì)與實(shí)現(xiàn)
6.1 系統(tǒng)設(shè)計(jì)概述
6.1.1 系統(tǒng)設(shè)計(jì)的原則與內(nèi)容
系統(tǒng)設(shè)計(jì)階段的主要目的是,在系統(tǒng)分析提出的反映用戶需求的邏輯方案的基礎(chǔ)上,科學(xué)合理地將邏輯方案轉(zhuǎn)換成可以實(shí)施的物理(技術(shù))方案。即根據(jù)系統(tǒng)分析說(shuō)明書(shū)中的系統(tǒng)邏輯模型,綜合考慮各種約束,利用一切可用的技術(shù)手段和方法,進(jìn)行各種具體設(shè)計(jì),確定新系統(tǒng)的實(shí)施方案,解決“系統(tǒng)怎么做”的問(wèn)題。系統(tǒng)設(shè)計(jì)階段的主要任務(wù)是:在科學(xué)合理的設(shè)計(jì)系統(tǒng)總體模型的基礎(chǔ)上,盡可能提高系統(tǒng)的運(yùn)行效率、可變性、可靠性、可控性和工作質(zhì)量。充分利用并合理投入各類可以利用的人、財(cái)、物資源,使之獲得較高的綜合效率。[3]
系統(tǒng)設(shè)計(jì)包括總體結(jié)構(gòu)設(shè)計(jì)和具體物理模型設(shè)計(jì)??傮w結(jié)構(gòu)設(shè)計(jì)主要指在系統(tǒng)分析的基礎(chǔ)上,對(duì)整個(gè)系統(tǒng)的劃分、機(jī)器設(shè)備配置=數(shù)據(jù)的存儲(chǔ)規(guī)律以及整個(gè)系統(tǒng)實(shí)現(xiàn)設(shè)計(jì)等方面的合理安排。
系統(tǒng)設(shè)計(jì)的優(yōu)劣會(huì)直接影響到整個(gè)系統(tǒng)設(shè)計(jì)的質(zhì)量和所獲得的經(jīng)濟(jì)效益。因此,為了使設(shè)計(jì)的系統(tǒng)能最大限度地滿足用戶的需求,在系統(tǒng)設(shè)計(jì)中應(yīng)遵循這樣一些基本原則:簡(jiǎn)單性、系統(tǒng)性、靈活性、可靠性和經(jīng)濟(jì)性。[7]
6.1.2 系統(tǒng)設(shè)計(jì)的基本方法
目前常見(jiàn)的系統(tǒng)設(shè)計(jì)方法主要有Jackson法、Parnas法和結(jié)構(gòu)化設(shè)計(jì)方法(SD)等。其中,Jackson法是面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法,其核心是按輸入輸出以及內(nèi)部存儲(chǔ)信息的數(shù)據(jù)進(jìn)行設(shè)計(jì),把數(shù)據(jù)結(jié)構(gòu)的描述變換為對(duì)程序結(jié)構(gòu)的描述;Parnas方法與主張程序結(jié)構(gòu)要充分反映數(shù)據(jù)結(jié)構(gòu)的Jackson方法完全相反,Parnas方法主張將可能會(huì)發(fā)生變化的數(shù)據(jù)結(jié)構(gòu)隱藏在一個(gè)模塊的內(nèi)部,使其它模塊與這個(gè)因素?zé)o關(guān),也就是說(shuō),在設(shè)計(jì)模塊時(shí),將某個(gè)因素屏蔽在某個(gè)模塊內(nèi)部,這個(gè)因素的不斷變化不至于傳播到所在模塊的邊界之外,即以信息屏蔽為原則建立模塊結(jié)構(gòu):SD方法是通過(guò)將結(jié)構(gòu)化編程技術(shù)(SP)的思想移植到整個(gè)程序系統(tǒng)的模塊結(jié)構(gòu)設(shè)計(jì)領(lǐng)域而形成的。SD方法自誕生以來(lái),一直顯示其強(qiáng)大的生命力,被計(jì)算機(jī)界認(rèn)為是60年代末期軟件領(lǐng)域研究的最大成果之一,是目前模塊結(jié)構(gòu)設(shè)計(jì)中歷史最久、使用最廣的一種方法。
SD方法的主題思想是將一個(gè)程序系統(tǒng)設(shè)計(jì)成由有層次關(guān)系的、相對(duì)獨(dú)立的、單一 功能的諸模塊組成的結(jié)構(gòu),即一方面滿足模塊間聯(lián)系弱,模塊內(nèi)聯(lián)系強(qiáng)的要求,另一方面諸模塊之間具有簡(jiǎn)單的層次結(jié)構(gòu)關(guān)系。在這種層次型的模塊結(jié)構(gòu)中,模塊之間的調(diào)用關(guān)系非常明確與簡(jiǎn)單,每個(gè)模塊可以單獨(dú)地被理解、編寫(xiě)、調(diào)試、查錯(cuò)與修改,一個(gè)模塊的錯(cuò)誤不易向其它模塊擴(kuò)散。理論分析與實(shí)踐經(jīng)驗(yàn)都證明,這種層次型的模塊結(jié)構(gòu)具有較高的正確性、可靠性、可理解性和可維護(hù)性,它適用于任何軟件系統(tǒng)的模塊結(jié)構(gòu)設(shè)計(jì)。因此,本系統(tǒng)開(kāi)發(fā)設(shè)計(jì)中選用SD方法進(jìn)行系統(tǒng)設(shè)計(jì)。
6.2 系統(tǒng)主要功能模塊結(jié)構(gòu)設(shè)計(jì)
6.2.1 系統(tǒng)主要功能模塊結(jié)構(gòu)
智能道路交通信息管理系統(tǒng)的設(shè)計(jì)方法主要采用結(jié)構(gòu)化系統(tǒng)的設(shè)計(jì)方法,其主要特點(diǎn)是:模塊結(jié)構(gòu)相對(duì)獨(dú)立、功能單一;模塊內(nèi)部聯(lián)系大;模塊之間聯(lián)系??;采用模塊結(jié)構(gòu)圖的描述方式。
本系統(tǒng)根據(jù)功能結(jié)構(gòu)來(lái)劃分為多個(gè)子系統(tǒng)模塊,主要的功能模塊有用戶管理、權(quán)限管理、違章信息錄入、違章信息公告、違章處罰、違章信息統(tǒng)計(jì)以及系統(tǒng)的設(shè)置部分——包括了:支隊(duì)管理、大隊(duì)管理、違章行為、違章地點(diǎn)、車輛類型、處罰地點(diǎn)等子模塊。接下來(lái)分別介紹幾個(gè)重要的模塊的設(shè)計(jì)。
6.2.2 用戶管理子系統(tǒng)
用戶管理子系統(tǒng)僅供管理員級(jí)的用戶使用,它包括增加用戶和查詢用戶信息兩個(gè)模塊:
①增加用戶:填寫(xiě)用戶信息,設(shè)定用戶所屬的組,添加用戶設(shè)定密碼。

圖6.1 用戶添加界面