jsp+sql智能交通道路管理系统论文_第1页
jsp+sql智能交通道路管理系统论文_第2页
jsp+sql智能交通道路管理系统论文_第3页
jsp+sql智能交通道路管理系统论文_第4页
jsp+sql智能交通道路管理系统论文_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科学生毕业设计(论文)附件I目 录任务书.1文献综述.4开题报告.9译文.14译文原文II1附件A重庆大学本科学生毕业设计(论文)任 务 书设计(论文)题目 智能道路交通信息管理系统学 院 计算机学院专 业 计算机科学与技术学 生姓 名 李小江指导教师姓名、职称 石锐 副教授助理指导教师姓名、职称下 发日 期 2005 年 12 月 14 日教 务 处2设计(论文)的主要内容与要求:智能道路交通信息管理系统通过对电子警察系统抓拍到的违章车辆的图像信息进行有效管理,达到惩戒违章司机,改善交通路口混乱,减少因交通违章造成的人为塞车和事故,提高交通执法的准确性和效率,节省警力并提高城市道路交通效率的目的。本系统包括四部分功能:(1)违章车辆图像信息的录入;(2)违章车辆信息的查询统计;(3)违章车辆信息的公告与处罚;(4)信息管理系统的维护与设置。设计(论文)的主要技术指标:1、实现违章图像的网络访问并将相应信息录入数据库;2、实现违章图像及信息的网络查询及信息统计;3、实现违章车辆信息的网络公告并对违章司机作出处罚;3、实现本信息管理系统的维护与设置。进 度 安 排序号 设计(论文)工作进度 日期(起止周数)1 查阅资料 第1,2周2 完成文献综述和开题报告 第3周3 熟悉开发环境 第4-5周4 系统设计与实现 第6-13周5 程序调试与测试 第14-15周6 撰写论文,准备答辩 第16周783主要参考文献:1 丁宝康、董健全编著 数据库使用教程 清华大学出版社 20032 丁爱萍编著 数据库技术及应用 西安电子科技大学出版社 20053 DATE C J. An Introduction to Database Systems. Vol. I,Addison-Wesley ,Version 6, 19954 谢希人编著 计算机网络(第2版) 电子工业出版社 19995 李劲、谢兆阳,SQL Server 2000数据库设计与系统管理 清华大学出版社20016 飞思科技产品研发中心编著 JSP应用开发祥解电子工业出版社 20057 施安平等译 JAVA程序设计教程(第5版)清华大学出版社 2005同组设计(论文)者:系负责人意见: 签字: 年 月 日学院负责人意见:签字: 年 月 日学生签字: 接受任务时间: 年 月 日注:任务书由指导教师填写。45附件B重庆大学本科学生毕业设计(论文)文献综述题 目 电子警察系统的发展现状学生姓名 李小江 学号 20024417指导教师评语:指导教师评定成绩 签字:交叉评阅教师评语:交叉评阅教师评定成绩 签字:教 务 处6文献综述: 电子警察系统的发展现状1摘要电子警察是“智能电子警察监测系统”的简称,它是一套高科技电子设备,最初是为维护交通执法提供了一种先进手段。以往许多城市在某些交通场合,由于没有有效的执法手段造成执法困难,例如:无人值守的路口;单行线;禁行、限时道路;限车型车道;主、辅路进出口;紧急停车带;公交专用道;违章超速等场合检查执法困难,特别是在夜间,违章行车现象经常发生,严重破坏了交通秩序。该设备能够对违章车辆进行自动判断与图像记录。执法部门可以根据该系统所提供的车辆违章过程的图像记录,对违章司机进行追究和处罚。几年来,各大中城市均在此方面做过有益的尝试,但使用情况总的来并不理想。主要原因是现有的电子警察抓拍设备存在许多缺陷,限制了它发挥更大的作用。从目前市场情况来看,还没有哪一家公司提供的系统和设备能够真正满足用户期望,用户对系统现状也看法各异。电子警察设备具有非常广阔的前景,但现阶段在设备选型方面却难度很大。本系统是作为电子警察的后台数据处理系统的“车辆违章处罚系统”。要求能实现交通主管部门的网上办公功能,通过对电子监控得到的数据进行录入,处理,查询,公告,处罚等,实现对违章车辆的纪录,处罚。因而,其在现代交通管理中有很大的发展空间。即使它在数据的采集,处理上还要求人工处理,但它还是比以前全人工的方式要优异得多。可以想象随着科学技术的发展,相信在不久就能在数据采集与处理上实现不同系统之间的数据传递,以及数据处理。2关键字电子警察,智能交通,违章处罚,电子监控3正文3.1电子警察的组成典型的“电子警察”通常是由图像检测(车辆感应)、拍摄、采集、处理、传输与管理以及辅助光源、辅助支架和相关配套设备等几个部分组成。主要有固定和流动的两种应用型式,自动和人工操作的两种工作方式。下面分别就各组成部分作一一介绍:1、图像检测部分:在系统中起车辆感应的作用,主要有:(1)环形线圈检测7器,(2)视频检测器;(3)超声波或微波(雷达波)检测器;(4)红外线检测器等几种。2、图像拍摄部分:在系统中起图像抓拍的作用,主要有照相机和摄像机。其中照相机目前基本上多采用数码照相机,极少使用传统的胶片式照相机(繁锁、后期使用成本高、实时性差)。而数码照相机多选用三百万以上像素、可变焦、自动光圈及白平衡调整等的准专业相机。不过,由于其结构、图像存取等原因,其实时性、连拍续传能力和环境适应性较差,一般多用于交叉路口的闯红灯车辆抓拍(需特制机箱,进行温度调控等)和人工流动拍摄等场合;而摄像机基本上都选用高清晰度(480TVL)、低照度(0.1lux)、高信噪比、动态抗逆光与强光抑制、背景光自动补偿、白平衡自动调整等功能的快速(快门速度不能慢于11000秒)工业级摄像机,其配套的镜头则应采用大孔径、可变焦,大光圈、快速自动光圈调整的专业光学镜头。3、图像采集部分:在系统中起图像采集即将模拟视频图像数字化的作用,通常采用多路视频图像采集卡:将多路模拟视频图像经过多路切换器、AD变换器以及裁剪、压缩编码后变成数字视频信息。国际上通常采用的视频压缩编码方式有:MJPEG、Wavelet(小波变换),MPEG-1(如VCD),MPEG-2(如DVD)和MPEG-4等几种。国内数字化视频监控工程中常用的是具有压缩率高、系统资源总帧数大、传输速率要求低、单卡可支持多路视频压缩的MJPEG和MPEG-4两种视频压缩编码方式。图像采集的优劣直接关系到系统的工作效能、图像质量和进一步处理、利用的成效大小。4、图像处理部分:事实上,应包括控制主机和系统应用软件两个部分,在系统中起控制、图像识别、存贮与管理的作用。为了保证系统在恶劣工作环境中连续不间断地自动运行,控制主机必须采用高速、大内存、大容量镜像硬盘等高性能工业级控制机或DSP处理机,以满足多路图像(包括全景和近景特写图像)的捕捉、识别、压缩、存贮、比对、报警、传输和故障自诊断与管理等实时多任务、多进程的操作要求,同时尚需预留有适宜的扩展与升级余地;而系统应用软件通常包括Windows或Linux或Unix操作系统、图像模糊识别与信息管理软件。图像模糊识别主要是车牌识别软件一般包括图像二值转换,图像差分、滤波与平滑,车牌定位与旋转,字符切割,字符识别,车牌颜色提取与识别和车牌分类等功能模块。控制主机的配置和操作系统合适与否直接决定了系统的性能、稳定性与可靠性的好坏。图像识别率的高低则几乎决定了系统技术水平和智能化程度的高低。5、信息传输部分:包括本地和远程传输两个部分,在系统中起信息传递与交换的作用。本地信息传输部分主要包括检测信号线、视频信号线、网络信号线,网卡以及交换机或集线器等,其是确保系统正常工作的“中枢神经”;而远程信息传输部分则主要要有线和无线介质两种,其是实现系统远程监控,远程维护与远程8报警以及信息共享与综合利用的基本保障。6、信息管理部分:包括中心主机和管理软件两部分,在系统中起信息的汇集、存贮、查询、统计、交换、备份、打印、嫌疑信息(如交通违章或事故逾期未处理、逾期未参加法定检验或审验,被盗抢和肇事逃逸等车辆信息)的自动比对与实时报警、系统故障自诊断与管理和远程监控、远程维护与远程报警等诸多重要作用。信息管理部分是实现系统“实时监视、联网布控、自动报警、快速反应、科学高效、信息共享,监控、威慑、防范和打击并重”综合效能,体现系统战斗力的关键所在。7、辅助光源:在系统中起辅助照明尤其是夜间或光线不足时补光,提高抓拍图像清晰度的作用。通常有:(1)频闪照明灯,如闪光灯:(2)连续照明灯,如路灯和其他冷、热光源(常见的有白炽灯、萤光灯、卤钨灯、陶瓷金卤灯,高压钠灯等多种)。辅助光源是确保系统在光线不足条件下正常工作的“夜明灯”,不可或缺。8、辅助支架:在系统中用于安装、固定摄像机或照相机和辅助光源等。常见的有:(1)龙门架;(2)悬臂架,如L或F型;(3)立柱;(4)移动式安装支架,如三角架和固定在汽车上专用支架等。辅助支架是系统正常工作,持续运行的基础,不可忽视。9、其他相关配套设备:在系统中主要起保证系统相关设备正常、稳定、可靠地通行的作用。常用的有:(1)长延时不间断电源(UPS),(2)净化稳压电源;(3)强、弱电防雷、设备避雷与接地装置;(4)系统故障、违章或嫌疑信息和防盗等报警装置;(5)打印机等等。3.2主要功能1)环形线圈和视频检测器复合检测、图像融合(拼接)与后期处理(滤波,平滑等优化处理和亮度对比度色彩锐化调整等)和边界触发报警功能,可全天候、不间断地对所有通过拍摄点的车辆(含违章、嫌疑车辆等)进行自动拍摄,且只有当车辆通过时才拍摄;2)准确地记录并存贮车辆(全景和近景即车头或车尾部位特写),车牌、速度、流量、日期、时间、地点和行驶方向等信息,能够自动识别车辆类型(大、小、客,货四类)、车身颜色、车牌(含汉字、字母,数字和车牌颜色),实现车辆超速、超车,逆行、不按道行驶、跨越双实线、闯红灯、禁停、禁行、禁弯等动、静态交通违章车辆抓拍,嫌疑车辆及车牌信息自动比对与实时报警功能;3)各功能模块(包括运行参数等)可根据实际需要进行灵活配置与管理。汉化界面、简单直观、操作维护方便。能够按照车型、车身颜色、车牌、速度、流量、日期、时间、地点、行驶方向和违章类别等相关条件进行单一或组合方式的信息查询、统计、传递与打印等;94)可存贮不少于80万辆汽车图像信息,实现全自动刷新,循环存储。能够进行多任务操作,监控、查询、统计、传递与打印等互不影响;5)完善的系统管理(包括用户权限管理、黑客与病毒防治、各功能模块及其电源的故障自诊断与自动报警含防盗报警等,各种报警的提示方式应有明显区别)和远程监控、远程维护与远程报警等功能。6)关键指标:(1)最高拍摄车速:160kmh;(2)车辆抓拍率:98%;(3)车牌抓拍率:90%:车牌识别率:80%。4结语随着科技的不断发展,道路监控手段也在不断地提高,电子警察的性能与图像拍摄、传输也在不断发展。电子警察就可以实现信号灯无线发射采集控制、图像自动下载,无线传输、系统自停自恢复自启动、远程无线监控电子警察工作状态等功能,这必将大大提高交通管理部门对交通的管理。10参考文献1 李巨伟等著北京交通违章监测非现场处罚数据库管理系统简介20032 黄晓丹著广州市电子警察拍摄系统及其应用20023 谢希人编著计算机网络(第2版)电子工业出版社 19994 飞思科技产品研发JSP应用开发详解(第二版)电子工业出版社20045 龙马工作室编著DREAMWEAVER MX2004 & JSP 动态网页编程完全自学手册人民邮电出版社20056 赛奎春著JSP工程应用与项目实践机械工业出版社20057 黄明等著JSP信息系统设计与开发实例机械工业出版社20048 刘晓华,陈亚强著J2EE应用开发详解电子工业出版社20049 王能斌著数据库管理系统中国水利水电出版社200410 李劲,谢兆阳著SQL Server 2000数据库设计与系统管理清华大学出版社200111 叶核亚,陈立等著JAVA2程序设计实用教程电子工业出版社200512 马云峰等著.IC卡交通违章处罚管理系统.200513 张春锐著IC卡在交通管理中的应用200411附件C:重庆大学本科毕业设计(论文)开 题 报 告设计(论文)题目 智能道路交通信息管理系统学 院 计算机学院专 业 计算机科学与技术学 生姓 名 李小江 学 号 20024417指导教师姓名、职称 石锐 副教授助理指导教师姓名、职称完 成日 期 2005 年 3 月 10 日教 务 处121、课题的目的及意义(含国内外的研究现状分析)电子警察是“智能电子警察监测系统”的简称,它是一套高科技电子设备,最初是为维护交通执法提供了一种先进手段。以往许多城市在某些交通场合,由于没有有效的执法手段造成执法困难,例如:无人值守的路口;单行线;禁行、限时道路;限车型车道;主、辅路进出口;紧急停车带;公交专用道;违章超速等场合检查执法困难,特别是在夜间,违章行车现象经常发生,严重破坏了交通秩序。该设备能够对违章车辆进行自动判断与图像记录。执法部门可以根据该系统所提供的车辆违章过程的图像记录,对违章司机进行追究和处罚。几年来,各大中城市均在此方面做过有益的尝试,但使用情况总的来并不理想。主要原因是现有的电子警察抓拍设备存在许多缺陷,限制了它发挥更大的作用。从目前市场情况来看,还没有哪一家公司提供的系统和设备能够真正满足用户期望,用户对系统现状也看法各异。电子警察设备具有非常广阔的前景,但现阶段在设备选型方面却难度很大。总结近年的实践经验,提出以下看法,只有在这几方面得到突破,才可能真正实现完善的电子警察系统。1)抓拍单元是具备200万以上像素的工业标准数码相机。具备良好的软件控制能力,并开放协议。2)采用工业级器件,具有良好的全天候工作能力,长期运行稳定可靠。3)系统采用嵌入式软硬件平台,以保证良好的稳定性。4)配置以太网通讯接口,支持远程文件传送协议。5)采用硬盘或存储卡在本地保存图片。6)信息管理部分:包括中心主机和管理软件两部分,在系统中起信息的汇集、存贮、查询、统计、交换、备份、打印、嫌疑信息(如交通违章或事故逾期未处理、逾期未参加法定检验或审验,被盗抢和肇事逃逸等车辆信息)的自动比对与实时报警、系统故障自诊断与管理和远程监控、远程维护与远程报警等诸多重要作用。其作为服务器的主机通常要选用高性能(最好是双CPU)工业级控制机或PC服务器;而管理软件部分则多是建立在Oracle或MS SQL Server或Sybase等大型数据库基础之上的系统综合管理与应用软件。信息管理部分是实13现系统“实时监视、联网布控、自动报警、快速反应、科学高效、信息共享,监控、威慑、防范和打击并重”综合效能,体现系统战斗力的关键所在。因此,开发出一套优化的电子警察系统,以及针对不同用户的需要,对违章图像进行管理和查询软件,能够提高交通部门工作效率,在一定程度上保障交通安全,减少交通隐患。将要开发的系统是作为电子警察的后台数据处理系统的“车辆违章处罚系统”。要求能实现交通主管部门的网上办公功能,通过对电子监控得到的数据进行录入,处理,查询,公告,处罚等,实现对违章车辆的纪录,处罚。因而,其在现代交通管理中有很大的发展空间。即使它在数据的采集,处理上还要求人工处理,但它还是比以前全人工的方式要优异得多。可以想象随着科学技术的发展,相信在不久就能在数据采集与处理上实现不同系统之间的数据传递,以及数据处理。142、课题任务、重点研究内容、实现途径智能道路交通信息管理系统通过对电子警察系统抓拍到的违章车辆的图像信息进行有效管理,达到惩戒违章司机,改善交通路口混乱,减少因交通违章造成的人为塞车和事故,提高交通执法的准确性和效率,节省警力并提高城市道路交通效率的目的。本系统包括四部分功能:1)违章车辆图像信息的录入;2)违章车辆信息的查询统计;3)违章车辆信息的公告与处罚;4)信息管理系统的维护与设置。充分理解课题内容及意义,掌握违规图像采集原理及方法,熟练应用JSP、SQL Server 2000等知识建立一套基于WEB的违章处罚管理系统,具备对违章图像的录入、存储、公告、处理,以及多种查询方式,公告,处罚和员工管理,权限设置等功能。重点研究内容:数据库的管理,WEB技术,图像存储,图片的传输,违章信息的录入、违章处罚、公告、信息统计、权限设置;这其中还包括了处罚决定书的打印、信息统计结果表的打印以及用户权限的实现方式,数据库的同步的细节性的问题值得仔细考虑。实现途径:按照软件工程的分析、设计方法和过程,应用数据库相关理论,运用JSP和JDBC和JavaBean技术,以SQLserver2000数据库管理系统为后台数据库支持来实现智能道路交通信息管理系统:本系统的设计采用模块化的设计方法,将系统分为违章信息的录入、违章信息公告、违章信息处罚、信息统计、用户及权限管理和包含很多系统初始化小模块的系统初始化模块,然后再整合这些模块使整个系统的功能统一在一个完整的框架下。在用户界面方面,采用页面框架导航的方式在一个页面中实现整个系统的功能,按这样的思想,用户界面的设计就采用框架的结构实现,页面分为三个框架页,顶部的为一个LOGO图标,左边的框架页设计成本系统的一个功能导航页面,相当于系统的功能菜单。用户的权限用查询数据库权限表的方式来控制导航页的内容来实现。15在实现的过程中可能遇到的难题:页面设计阶段的界面设计和美工问题,由于自身缺乏美术感,因此只能在用户界面设计是多参考他人的设计,并借鉴他人成功之处,尽可能在设计中利用开放的素材资源,以及一些好的设计模板;系统用户权限的设计方式,用数据库表和应用程序相结合来实现,还是用数据库的角色来实现;系统的数据库连接问题,计划在本系统中采用JDBCODBC桥接器来实现连接,这就要求有相应数据库驱动程序(本系统用SQL Server2000的驱动程序),并建立起ODBC数据源,最后再用JAVA程序进行连接;至于打印的问题,我现在没想到好的解决方法,只好把它留到系统开发过程中再作处理。总之,现在系统还没有开始进行相关的具体设计和实现,因此,系统将要涉及到的各种问题,现在是不可能完全预知的,所以,只有留待到系统设计和实现阶段再进行分析,处理。 报告人签名: 年 月 日3、进度计划序号 日期 进度安排1 第1,2周 查阅资料2 第3周 完成文献综述和开题报告3 第4-5周 熟悉开发环境4 第6-13周 系统设计与实现5 第14-15周 程序调试与测试6 第16周 撰写论文,准备答辩78164、指导教师意见 指导教师签名:年 月 日17附件D: 重庆大学本科学生毕业设计外文译文指导教师评语:指导教师评定成绩 签字:交叉评阅教师评语:交叉评阅教师评定成绩 签字:学生姓名: 李小江 完成日期 2006 年 3 月 5 日教 务 处18译文: JDBC与JSP研究1JDBC入门本文阐述了JDBC(数据库连接)API(应用程序接口)的基本内容。在这里,你将学到用基本的JDBC API去创建表单,插入数值,查询表单,检索结果,修改表单,创建动态语句,完成事务,捕捉异常和错误。本文来自SUN公司关于JDBC基础内容的官方指南。-概述-建立连接-第一个JDBC语句-精制JDBC语句-执行DDL语句-执行查询语句-结果集访问说明-事务处理-异常和错误处理-简单的代码和编辑规则1.1 概述JDBC的访问级接口是提供了SQL数据库操作和更新操作的编程接口。他们通过带数据库接口的库程序允许在普通的程序中调用SQL。特别的,Java提供了很多非常简单的基于JDBC的接口。这里有一条简单的方法可也看到在访问级发生了什么:你正在写一个简单的Java程序。在程序的某处,你需要和数据库交换数据。用标准的库程序,你就可也打开一个数据库的连接。接下来,用JDBC来发送SQL代码给数据库,并且加工要返回的结果。等到你结束工作,就关闭数据连接。这样的方法需要和内嵌SQL的预编辑方法相比较。后者含有一个预编辑过程,在这个过程中内嵌的SQL语句被转化为主机语言代码(C/C+)。访问级的接口不要求预编辑过程就避免了内嵌SQL语句转化的过程。这样在增加轻便性的同时使客户服务的关系更清晰。1.2 建立连接当然,最先要做的是在你的计算机上安装Java,JDBC和DBMS。由于我们想19要连接Oracle数据库,我们也就需要一个支持它的驱动程序。幸运地是,我们有一个负责的主管他已经在Leland的机子上为我们做好了。和前面说的一样,在一个数据库能被访问前,一个在程序(client)和数据库(server)之间的连接必须被打开。这包括两步:1、装载特定厂商的驱动程序为什么需要这一步呢? 为了确保轻便和代码重用,API被尽可能地设计来不依赖于一个数据库的版本或厂家。由于不同DBMS拥有不同的行为,我们就需要告诉驱动管理器我们想用那种DBMS,以便它能调用正确的驱动程序。装载Oracle驱动程序可以用下面的代码:Class.forName(“oracle.jdbc.driver.OracleDriver”)2、建立连接当驱动装载完成就可以建立连接,你建立一个实际的连接可以用:Connection con=DriverManger.getConnection(“jdbc:oracle: thin:dbaprodl:1544:SHRI_PRD”,username,password );现在,让我们看看这个语句是干什么的。第一个字符串是关于数据库的URL,它包含了协议(JDBC),厂商(oracle),驱动(thin),服务器(dbaprodl),端口号(1521),和一个服务实例(SHRI_PRD)。用户名和密码就是你过去输入SQLPLUS以进入你的帐户的用户名和密码。这就是建立连接的步骤。最后一步返回来的是一个打开的连接,我们将用它来向数据库传递SQL语句。在上面的代码中,con是一个打开的连接,并且我们在后面还将用到它。注意:上面提到的价值在我们的环境中是用根据的。他们在别的环境中有不同的价值。1.3 创建JDBC 语句JDBC语句对象是用来发送你的SQL语句到DBMS的,不是与SQL语句相混淆的。JDBC语句是绑定在一个打开的连接上的,不只是一个简单的SQL语句。你能把JDBC语句对象想象成嵌在连接上的一个信息通道,它能传递一个或多个你的SQL语句(那些你要执行的)到DBMS。一个活动的连接要求创建一个Statement对象。下面的小代码,就是用刚才的连接con,来为你实现Statement对象的:Statement stmt = con.createStatement();这样,一个Statement对象存在了,但是它没有向DBMS传递一个SQL语句。我们将在下一节学习它。1.4 精制JDBC语句有时,用精制的语句对象来向DBMS发送SQL语句能更方便或更有效。它区20别于其超类Statement的主要特征是,它不像Statement,在它被创建时就被给与了一个正确的SQL语句。这个SQL语句接下来就以正确的方式发向DBMS,并且在那里得到编译。因此,精制的语句实际上是连接的一个信道,并汇编有关SQL声明.和用普通的语句在每次用的时候都要编译一次相比,它提供的优势是,当你需要用相同的或相似的带不同参数的查询多次,语句就可以被DBMS编译和优化,而在不同参数时,不再要求编译。PreparedStatements 也是用连接方法来创建的。下面的小代码展示了怎么创建一个有三个输入参数的带参数SQL语句:PreparedStatements prepareUpdateprice =con. preparedStatements(“UPDATE Sells SET price = ? where bar = ? AND beer = ?”);在执行一个PreparedStatement前,我们需要提供参数的值。这可以调用定义在PreparedStatement类中的SET XXX方法来完成。最常用的方法是setInt,setFloat,setDouble,setString 等。你可以设置参数的值在执行准备的语句前。继续上面的例子,我们将写:prepareUpdatePrice.setInt(1, 3);prepareUpdatePrice.setString(2, Bar Of Foo);prepareUpdatePrice.setString(3, BudLite);1.5 执行DDL语句在JDBC中执行SQL语句用很多样式,他们依赖于SQL语句的目的。DDL(数据定义语言)语句,象表的创建和删除语句,还有更新表的内容的语句都是通过executeupdate方法执行的。注意到这些命令都改变数据库的状态,因此方法的名字包含”Update”。下面的代码是executeupdate语句的例子:Statement stmt con.createStatement();stmt. Executeupdate(“CREATE TABLE Sells” + “(bar VARCHAR2(40),beerVARCHAR2(40),price REAL)”);stmt. Executeupdate(“INSERT INTO Sells ” + “VALUES (Bar OfFoo,BudLite,2.00)” );String sqlString= “CREATE TABLE Bars ” + “nameVARCHAR2(40),address VARCHAR2(80),license INT”);Stmt. Executeupdate(sqlString);由于SQL语句不太适合在一行上显示,我们就把它打断成两个字符串,并且用加号连接起来以便它被编译。特别注意“INSERT INTO Sells”和“VALUES”之间的间隔。也注意我们更愿意重用相同的Statement而不是重新创建一个。21在执行executeUpdate时常常是调用DDL语句,返回的结果一般是0,在数据修改语句执行时将返回一个大于或等于0的值,这个数据表明了其间的关系。当使用PreparedStatement时,我们将执行这样的一个语句,它首先要设定参数的值(象上面所见的那样),接着调用executeU n = prepareUpdatePrice.executeUpdate();1.6 执行SQL语句作为和前一节的语句相对的语句,一个查询希望得到一组记录来作为结果,并且不改变数据库的状态。自然地,这里就有相应的方法叫做executeQuery,它返回一个ResultSet对象作为其结果。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.”);查询得到的结果集包含在一个变量rs中,rs是ResultSet的一个实例。这样的组对我们没有太大的作用,除非我们能访问每一行和每行中的各个属性。ResultSeta给我们提供了一个能让我们依次访问每行的游标。游标仅仅是第一行的集。每次调用next方法使它移动到下一行,如果下一行存在就返回真,如果没有剩余行就返回错。我们可以用适当类型的getXXX方法去检索行的各个属性。在前面的例子中,我们用了getDtring和getFloat两个方法来访问各列的值。注意到我们用想得到的值得列的列名作为方法的参数。同时也注意,VARCHAR2类型的bar,beer被转换为Java String,REAL转换为Java float.同样地,我们可以指定列号来代替列名,也能得到相同的结果。这样,有关的语句就应该是:Bar = rs.getString(1);Beer = rs.getString(2);Price = rs.getFloat(3);当使用PreparedStatement工作时,我们应该执行一个设置好参数的查询,并且用它调用executeQuery方法。22ResultSet rs = prepareUpdatePrice.executeQuery();1.7 结果集访问说明JDBC提供了一系列的方法来找出你在处理结果集的那个地方,方法包括:getRow,isFirst,isBeforeFirst,isLast,isAfterLast.他们提供可以任意访问结果集中各行的游标。默认的,游标仅仅只能向前并且是只读的。在为Connection创建Statement时,你可以改变ResultSet的类型,使它成为更方便查找和更新的模型:Statement stmt = con.createStartment(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);ResultSet rs = stmt.executeQuery(“SELECT * FROM Sells”);不同的类型选项有: TYPE_FORWARD_ONLY、TYPE_SCROLL_INSENSITIVE、和 TYPE_SCROLL_SENSITIVE 。你可以利用 CONCUR_READ_ONLY 和CONCUR_UPDATABLE选项来选择是用只读的还是可更新的游标。用默认的游标,你可以利用rs.next()来卷动游标。用可卷动的游标你可设置更多的选项:rs.absolute(3); / 移动到第三tuplers.previous(); /向后移动一个tuple(tuple 2)rs.relative(2); /向后移动两个tuples(tuple 4)rs. relative(-3); /往回移动两个tuples(tuple 1)这里还有很多可卷动游标特征的细节。可卷动游标,虽然在某些应用中很有用,但是它非常复杂,因此在使用时要小心和克制。更多关于游标细节的操作技术可以在New Features in the JDBC 2.0 API上找到。1.8 事务处理JDBC允许多个SQL语句嵌入到一个单一的事务中。因而,我们用JDBC事务可以确保ACID(原子性、一致性、独立性、完整性)属性。事务控制是通过连接对象完成的。当连接建立时,它就默认是自动提交型。这意味着每个SQL语句都被认为是一个单独得事务,并且只要它自身执行完成就马上提交。(这样并不完全精确,并且在大多数情况下,我们可能被它蒙蔽而不知道这些细节。)我们能为连接关闭自动提交,用:con.setAutoCommit(false);也可以再打开,用:con. setAutoCommit(ture);一旦自动提交关闭,没有SQL语句能被提交(那不是说,数据库将永远得不到更新),直到你明确地调用commit()方法来告诉它提交。23Cmit();在提交之前的任何地方,我们都可也调用rollback()来卷回事务,并恢复数据到上一次提交的地方(在尝试更新之前)。下面是个融合了上面观点的例子。con.setAutoCommit(false);Statement stmt = con.createStatement();Stmt.executeUpdate(“INSERT INTO Sells VALUES(bar offoo,budlite,1.00)”);con.rollback();Stmt.executeUpdate(“INSERT INTO Sells VALUES(bar ofjoe,Miller,2.00)”);mit();con.setAutoCommit(true);让我们浏览这个例子理解几个方法的用法和作用。我们首先看看自动提交关闭时,接下来的几条语句需要看成一个整体。我们尝试在Sells表中插入记录(barof foo,budlite,1.00))。然而,这个操作最终并没完成(committed).当我们调用rollback,我们取消了插入。注意,Sells表现在仍和我们尝试插入之前一样。接着我们尝试插入其他记录,并且这次,我们提交了事务。现在Sells表就受到了永久的影响,并且多了一条新的记录。最后,我们重新开启了自动提交。我们同样可以按需要地设定事务的独立性。例如,我们可以设定事务独立性为TRANSACTION_READ_COMMITTED,它不允许访问数据直到数据提交完毕,同时也不允许读脏数据。在连接的接口中提供了5个独立性级别。默认下,独立性级别是串行化 。JDBC 允许查看数据库设定的独立性级别(用连接的getTransactionIsolation 方法),也可以设定适当的级别 ( 用连接的setTransactionIsolation方法)。rollback常常和Java异常处理结合在一起来恢复不可预知的错误。这样的结合提供了简单而优秀的处理数据完整性的机制。我们将在下一节学习JDBC的异常处理。1.9 错误与异常处理事实上,在软件项目中错误是常常发生的。经常,数据库程序是一个危险的应用,并且温和地捕捉和处理错误是势在必行的。程序应该能恢复并使数据库保持一致性的状态。Rollback与Java异常处理机制协同工作是达到这一要求的一条清晰的道路。客户端(程序)访问服务器(数据库)需要是否有错误从服务器返回。JDBC通过两个不同级别的错误情况(SQLException和SQLWarning)来获取以上信息。24SQLExceptions是Java异常,假如不处理,会终止应用程序。SQLWarnings是SQLException的子类,但它们描述不致命的错误或不预期的情况等,可以忽略。在Java中,预计要抛出异常或警告的语句被包含在try语句块中。如果在try语句块中的语句抛出了异常或警告,那么,在相应的catch语句中将被捕获。每个catch语句都被指明准备捕获那个异常。下面是一个捕捉异常,使用错误情况来卷回事务的例子:try con.setAutoCommit(false);stmt.executeUpdate(“CREATE TABLE Sells (barVARCHAR2(40),”+”beer VARHAR2(40),price REAL)”);stmt.executeUpdate(INSERT INTO Sells VALUES +(Bar Of Foo, BudLite, 2.00) ;mit() ;con.setAutoCommit(true) ;catch(SQLException ex) System.err.println(SQLException: + ex.getMessage() ;con.rollback() ;con.setAutoCommit(true) ;既然这样,一个异常肯定被抛出,因为错误的书写导致了beer被定义为VARHAR2。由于在DBMS中没有这样的类型,一个SQLException将被抛出。这样输出就将是:Message: ORA-00902:invalid datatype还有就是,如果你的数据类型正确,但万一你的你的数据库超过了空间限制并不能再创建一个新的表。SQLWarning可以从Connection对象、Statement对象和ResultSet对象中找回来。每一个仅仅存放着最近的SQLWarning。因此,只要你用你的Statement对象执行其他的语句,那么以前的警告就将被丢弃。下面的小代码举例说明了怎么使用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() ;25if (warning != null)warning = warning.getNextWarning() ;if (warning != null)System.out.println(Message: + warn.getMessage() ;SQLWarnings(相对于SQLExceptions)其实是相当难得,最多的就是数据连接切断的警告。后面将要指出的是在读或写数据库是这里存在的一个问题。1.11简单的代码和编辑规则有望地,到现在你已经可以熟悉地用JDBC写复杂的代码了。这里有一个简单的例子融合了上面多有的观点。我们还有一些简单的为教育的目的由Craig Jurney编写的代码。你可以免费地使用这些代码来作为一个准则,或者在将来写代码是用作筐架,但是你要在你引用了代码的应用上做一个说明。SQLBuilder.java - Creation of a Relation 关系的创建SQLLoader.java - Insertion of Tuples 插入记录SQLRunner.java - Processes Queries 查询过程SQLUpdater.java - Updating Tuples 更新记录SQLBatchUpdater.java - Batch Updating 批更新SQLUtil.java - JDBC Utility Functions JDBC的有用函数不要忘记用source /usr/class/cs145/all.env,它将正确的设置你的classpath。增加你的全局的classpath的简单命令:elaine19:$ javac SQLBuilder.javaelaine19:$ java SQLBuilder替换成:elaine19:$ javac SQLBuilder.javaelaine19:$ java classpath/usr/pubsw/apps/oracle/8.1.5/jdbc/lib/classes111.zip: SQLBuilder在java的用户名和密码文件中有固定的用户名和密码。他们必须被改成你自己的用户名和密码,这样你才能访问数据库。这篇文章最初由Nathan Folkert在2000年春写给Jennifer Widom教授的CS145班,在2000年秋,它又被Mayank Bawa出租给Jeff Ullman教授的CS145班。JimZhuang在2005年夏作了一点小改动。同时感谢Matt Laue的排版改正。2利用JSP和JDBC技术访问动态的WEB数据26这篇文章讨论用JSP和JDBC技术来整合WEB站点上的静态的、动态的和数据库的内容。为了简单和举例的需要,这里的JSP页面用简短的脚本来揭示JSP开发者根本的JDBC观点而不是把它们隐藏在传统的标签下。作者介绍了一种关键的设计途径就是整合JavaBeans组件和JDBC,就好像JSP技术已经运用了bean和HTTP一样。他也提供代码来执行这种整合。建立在Java Servlet技术上, JSP技术是生成动态内容的Java 服务器端的核心。一种动态内容的来源是关系数据库。为了管理来自在线社团的电子商务事务,WEB站点用关系数据库来存储各种信息:目录条款,图像,文本,注册用户的数据等等。这篇文章讨论利用JDBC的JSP与关系数据库的应用。JDBC的意思就是通过它,Java程序可以操作关系数据库。为了能更好的学习这篇文章,你应该熟悉JDBC和SQL。2.1 JDBC基础JDBC是连接Java和SQL数据库的桥梁。首要的JDBC对象描述数据库的连接且语句的执行要依赖这个连接。和关系数据库一起使用的两种基本的语句是查询和更新。作为先决条件,你首先需要用java.sql.DriverManger类建立一个数据库连接。连接的建立要花费很长的时间,因此,在强事务环境中,比如一个WEB服务器,只要可能你就想要重用连接。这样的重用称为connection pooling。如果你的JDBC技术已经生疏了,在例子Listing 1中代码片段说明了怎样建立数据库连接,用连接创建statement对象,发送SQL查询,处理结果,以及释放JDBC资源。Listing 1.Simple JDBC codeConnection 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();在现实生活中,JDBC代码没有这么简单;异常和警告情况需要处理。例子27Listing 2 是相同的JDBC例子但是增加了JDBC异常和警告的处理。在这个例子中,异常和警告是简单和笨拙的,在异常情况下,我们终止操作。可是,dinally子句确保了资源的释放。在这里仅仅暗示实际的处理结果。我们将在本文的后面找到更详细的内容。如果我们正在执行一个数据库更新而不

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论