Graduation Design (Thesis)
attached
pieces
directory
Task book 1
Literature Review 4
Opening report 9
Translation 14
original translation
Annex A
Graduation Design (Thesis)
mission statement
Design (Thesis) Topic Intelligent Road Traffic Information Management System
Faculty of Computer Science
Professional Computer Science and Technology
student name
Instructor's name and title
Assistant instructor's name and title
Issuing Date 20 Years Month Day
Academic Affairs Office
The main content and requirements of the design (thesis): The intelligent road traffic information management system effectively manages the image information of illegal vehicles captured by the electronic police system, so as to punish drivers who violate the rules, improve the confusion at traffic intersections, and reduce human-induced traffic violations. Traffic jams and accidents, improve the accuracy and efficiency of traffic law enforcement, save police force and improve the efficiency of urban road traffic. This system includes four functions: (1) Entry of illegal vehicle image information; (2) Query and statistics of illegal vehicle information; (3) Announcement and punishment of illegal vehicle information; (4) Maintenance and setting of information management system. The main technical indicators of the design (thesis): 1. Realize the network access of illegal images and enter the corresponding information into the database; 2. Realize the network query and information statistics of illegal images and information; 3. Realize the maintenance and setting of this information management system. | ||
---|---|---|
schedule | ||
serial number | Design (thesis) work progress | Date (starting and ending weeks) |
1 | access information | Week 1, 2 |
2 | Complete the literature review and proposal report | week 3 |
3 | Familiar with the development environment | Week 4-5 |
4 | System Design and Implementation | Weeks 6-13 |
5 | Program debugging and testing | Week 14-15 |
6 | Writing a dissertation, preparing for defense | week 16 |
7 | ||
8 | ||
Main references: [1] Ding Baokang and Dong Jianjian edited database usage tutorial Tsinghua University Press 2003 [2] Ding Aiping edited database technology and application Xidian University Press 2005 [3] DATE C J. An Introduction to Database Systems. Vol . I, Addison-Wesley ,Version 6, 1995[4] Xie Xiren edited Computer Network (Second Edition) Electronic Industry Press 1999[5] Li Jin, Xie Zhaoyang, SQL Server 2000 Database Design and System Management Tsinghua University Press 2001 [ 6] JSP Application Development Xiangjie Electronic Industry Press, edited by Feisi Technology Product R & D Center, 2005 [7] Shi Anping translated JAVA programming tutorial (5th edition), Tsinghua University Press, 2005 | ||
Designers (thesis) of the same group: | ||
Opinion of the person in charge of the department: Signature: Year, Month, Day | ||
Opinion of the person in charge of the college: Signature: Year Month Day | ||
Student's signature: time to accept the task: year, month, day |
Note: The task book is filled in by the instructor.
Annex B
Graduation Design (Thesis)
literature review
Topic The development status of the electronic police system
student name student number
Instructor comments:
Instructor's signature on grades:
Cross-Review Teacher Comments:
Cross-review teacher-assessed grade signature:
Academic Affairs Office
literature review:
The Development Status of Electronic Police System
1 summary
Electronic police is the abbreviation of "intelligent electronic police monitoring system". It is a set of high-tech electronic equipment, which originally provided an advanced means for maintaining traffic law enforcement. In the past, in many cities, law enforcement was difficult due to the lack of effective means of law enforcement in certain traffic situations, such as: unattended intersections; It is difficult to check and enforce the law on occasions such as violation of the rules and speeding, especially at night, the phenomenon of illegal driving often occurs, seriously disrupting the traffic order. The device can automatically judge and record images of illegal vehicles. The law enforcement department can investigate and punish the violating driver according to the image record of the vehicle violation process provided by the system. Over the past few years, large and medium-sized cities have made useful attempts in this regard, but the usage situation is generally not satisfactory. The main reason is that there are many defects in the existing electronic police capture equipment, which limits its greater effect. Judging from the current market situation, no system and equipment provided by any company can truly meet user expectations, and users have different opinions on the status quo of the system. Electronic police equipment has very broad prospects, but it is very difficult to select equipment at this stage.
This system is a "vehicle violation punishment system" as the background data processing system of the electronic police. It is required to be able to realize the online office function of the traffic authority, and to record and punish vehicles violating regulations by entering, processing, querying, announcing, and punishing the data obtained from electronic monitoring. Therefore, it has great room for development in modern traffic management. Even though it requires manual processing in data collection and processing, it is still much better than the previous fully manual method. It is conceivable that with the development of science and technology, it is believed that data transfer and data processing between different systems will be realized in data collection and processing in the near future.
2 keywords
Electronic police, intelligent transportation, penalties for violations, electronic monitoring
3 text
3.1 Composition of electronic police
A typical "electronic police" is usually composed of image detection (vehicle sensing), shooting, acquisition, processing, transmission and management, as well as auxiliary light sources, auxiliary brackets and related supporting equipment. There are mainly two application types of fixed and mobile, and two working modes of automatic and manual operation. The following is an introduction to each component:
1. Image detection part: it plays the role of vehicle induction in the system, mainly including: (1) loop coil detector, (2) video detector; (3) ultrasonic or microwave (radar wave) detector; (4) infrared ray Several types of detectors.
2. Image shooting part: It plays the role of image capture in the system, mainly including cameras and video cameras. Wherein cameras mostly adopt digital cameras at present, and seldom use traditional film cameras (complex locks, high post-use cost, poor real-time performance). Digital cameras mostly use quasi-professional cameras with more than 3 million pixels, variable focus, automatic iris and white balance adjustments. However, due to its structure, image access and other reasons, its real-time performance, continuous shooting and continuous transmission ability, and environmental adaptability are poor, and it is generally used for capturing vehicles running red lights at intersections (requires special chassis, temperature control, etc.) and artificial flow Shooting and other occasions; and cameras basically use high-definition (≥480TVL), low illumination (≤0.1lux), high signal-to-noise ratio, dynamic anti-backlight and strong light suppression, automatic background light compensation, automatic white balance adjustment and other functions For high-speed (shutter speed not slower than 1/1000 second) industrial-grade cameras, the matching lenses should use professional optical lenses with large aperture, variable focus, large aperture, and fast automatic aperture adjustment.
3. Image acquisition part: in the system, it plays the role of image acquisition and digitization of analog video images. Usually, a multi-channel video image acquisition card is used: the multi-channel analog video images are passed through a multi-channel switcher, A/D converter, cropped and compressed After encoding, it becomes digital video information. The commonly used video compression coding methods in the world include: MJPEG, Wavelet (wavelet transform), MPEG-1 (such as VCD), MPEG-2 (such as DVD) and MPEG-4. MJPEG and MPEG-4 video compression coding methods are commonly used in domestic digital video surveillance projects with high compression rate, large total frame number of system resources, low transmission rate requirements, and single card can support multi-channel video compression. The quality of image acquisition is directly related to the working efficiency of the system, image quality and further processing and utilization effects.
4. Image processing part: In fact, it should include two parts, the control host and the system application software, which play the role of control, image recognition, storage and management in the system. In order to ensure the continuous and uninterrupted automatic operation of the system in the harsh working environment, the control host must use high-performance industrial-grade control machines or DSP processors such as high-speed, large memory, and large-capacity mirror hard disks to meet the requirements of multiple images (including panoramic and close-up views). Close-up image) capture, identification, compression, storage, comparison, alarm, transmission, fault self-diagnosis and management and other real-time multi-task and multi-process operation requirements, and at the same time, it is necessary to reserve appropriate room for expansion and upgrade; and System application software usually includes Windows or Linux or Unix operating system, image fuzzy recognition and information management software. Image fuzzy recognition is mainly license plate recognition software generally includes functional modules such as image binary conversion, image difference, filtering and smoothing, license plate positioning and rotation, character cutting, character recognition, license plate color extraction and recognition, and license plate classification. The configuration of the control host and the suitability of the operating system directly determine the performance, stability and reliability of the system. The level of image recognition rate almost determines the level of system technology and intelligence.
5. Information transmission part: including two parts of local and long-distance transmission, which play the role of information transmission and exchange in the system. The local information transmission part mainly includes detection signal lines, video signal lines, network signal lines, network cards, switches or hubs, etc., which are the "central nerves" to ensure the normal operation of the system; the remote information transmission part mainly has two types of wire and wireless media. It is the basic guarantee for the realization of system remote monitoring, remote maintenance and remote alarm, as well as information sharing and comprehensive utilization.
6. Information management part: including two parts of the central host and management software. In the system, information collection, storage, query, statistics, exchange, backup, printing, and suspicious information (such as traffic violations or accidents that have not been processed within the time limit, have not been processed within the time limit) Participate in statutory inspection or inspection, automatic comparison and real-time alarm of vehicle information such as stolen, robbed and hit and run, self-diagnosis and management of system faults, remote monitoring, remote maintenance and remote alarm, and many other important functions. The information management part is the key to realize the system's comprehensive effectiveness of "real-time monitoring, networked deployment and control, automatic alarm, rapid response, scientific and efficient, information sharing, monitoring, deterrence, prevention and strike" and reflect the combat effectiveness of the system.
7. Auxiliary light source: It plays the role of auxiliary lighting in the system, especially at night or when the light is insufficient, to improve the clarity of the captured image. Usually there are: (1) strobe lights, such as flash lights: (2) continuous lights, such as street lamps and other cold and hot light sources (common incandescent lamps, fluorescent lamps, halogen tungsten lamps, ceramic metal halide lamps, high-voltage sodium lamps, etc.). The auxiliary light source is an indispensable "night light" to ensure the normal operation of the system in low-light conditions.
8. Auxiliary bracket: used in the system to install and fix cameras or cameras and auxiliary light sources, etc. Common ones are: (1) gantry frame; (2) cantilever frame, such as L or F type; (3) column; (4) mobile mounting bracket, such as tripod and special bracket fixed on the car. The auxiliary support is the basis for the normal and continuous operation of the system and cannot be ignored.
9. Other related supporting equipment: in the system, it mainly plays a role in ensuring the normal, stable and reliable passage of system related equipment. The commonly used ones are: (1) long-time uninterruptible power supply (UPS), (2) purification and regulated power supply; (3) strong and weak current lightning protection, equipment lightning protection and grounding device; (4) system failure, violation or suspected information And anti-theft and other alarm devices; (5) printers and so on.
3.2 Main functions
- Ring coil and video detector compound detection, image fusion (splicing) and post-processing (filtering, smoothing and other optimization processing and brightness/contrast/color/sharp adjustment, etc.) Automatic shooting of vehicles passing the shooting point (including illegal and suspected vehicles, etc.), and only shooting when the vehicle passes;
- Accurately record and store vehicles (panorama and close-up, i.e. close-up of the front or rear of the vehicle), license plate, speed, flow, date, time, location and driving direction, etc., and can automatically identify vehicle types (large, small, passenger, cargo) Four categories), vehicle body color, license plate (including Chinese characters, letters, numbers and license plate color), to realize vehicle speeding, overtaking, retrograde, not following the road, crossing double solid lines, running red lights, no parking, no walking, no turning, etc. , Static traffic violation vehicle capture, automatic comparison of suspected vehicles and license plate information and real-time alarm function;
- Each functional module (including operating parameters, etc.) can be flexibly configured and managed according to actual needs. Chinese interface, simple and intuitive, easy to operate and maintain. According to relevant conditions such as vehicle model, body color, license plate, speed, flow rate, date, time, location, driving direction and violation category, information query, statistics, transmission and printing can be performed in a single or combined manner;
- It can store image information of no less than 800,000 vehicles, realize automatic refresh and cycle storage. Capable of multi-tasking operations, monitoring, query, statistics, transmission and printing do not affect each other;
- Perfect system management (including user rights management, hacker and virus prevention, fault self-diagnosis and automatic alarm of each functional module and its power supply - including anti-theft alarm, etc., and the prompt methods of various alarms should be clearly distinguished) and remote monitoring, Functions such as remote maintenance and remote alarm.
- Key indicators: (1) Maximum shooting speed: ≥160km/h; (2) Vehicle capture rate: ≥98%; (3) License plate capture rate: ≥90%; license plate recognition rate: ≥80%.
4 Epilogue
With the continuous development of science and technology, road monitoring methods are also constantly improving, and the performance, image capture and transmission of electronic police are also constantly developing. The electronic police can realize functions such as signal light wireless emission collection control, automatic image download, wireless transmission, system self-stop, self-recovery and self-start, remote wireless monitoring of the electronic police working status, etc., which will greatly improve the traffic management of the traffic management department.
references
[1] Li Juwei is waiting. A brief introduction to the off-site penalty database management system for traffic violation monitoring in Beijing.
[2] Written by Huang Xiaodan. Guangzhou electronic police shooting system and its application.
[3] Edited by Xie Xiren. Computer Networks (2nd Edition). Electronic Industry Press
[4] Research and development of Feisi technology products. Detailed Explanation of JSP Application Development (Second Edition). Electronic Industry Press.
[5] Edited by Longma Studio. DREAMWEAVER MX2004 & JSP dynamic web page programming complete self-study manual. People Post Press.
[6] Written by Sai Kuichun. JSP engineering application and project practice. Mechanical Industry Press.
[7] Huang Ming is waiting. JSP information system design and development examples. Mechanical Industry Press.
[8] Liu Xiaohua, Chen Yaqiang. Detailed J2EE application development. Electronic Industry Press.
[9] Written by Wang Nengbin. database management system. China Water Conservancy and Hydropower Press.
[10] Li Jin, Xie Zhaoyang. SQL Server 2000 database design and system management. Tsinghua University Press.
[11] Ye Heya, Chen Li et al. JAVA2 programming practical tutorial. Electronic Industry Press.
[12] Ma Yunfeng et al. IC card traffic violation punishment management system.
[13] Zhang Chunrui. Application of IC card in traffic management.
Annex C:
Graduation Design (Thesis)
Opening report _
Design (Thesis) Topic Intelligent Road Traffic Information Management System
Faculty of Computer Science
Professional Computer Science and Technology
student name student number
Instructor's name and title
Assistant instructor's name and title
Completion Date 20 Years Month Day
Academic Affairs Office
1. The purpose and significance of the project (including the analysis of the research status at home and abroad) Electronic police is the abbreviation of "intelligent electronic police monitoring system". It is a set of high-tech electronic equipment, which initially provided an advanced means for maintaining traffic law enforcement . In the past, in many cities, law enforcement was difficult due to the lack of effective means of law enforcement in certain traffic situations, such as: unattended intersections; It is difficult to check and enforce the law on occasions such as violation of the rules and speeding, especially at night, the phenomenon of illegal driving often occurs, seriously disrupting the traffic order. The device can automatically judge and record images of illegal vehicles. The law enforcement department can investigate and punish the violating driver according to the image record of the vehicle violation process provided by the system. Over the past few years, large and medium-sized cities have made useful attempts in this regard, but the usage situation is generally not satisfactory. The main reason is that there are many defects in the existing electronic police capture equipment, which limits its greater effect. Judging from the current market situation, no system and equipment provided by any company can truly meet user expectations, and users have different opinions on the status quo of the system. Electronic police equipment has very broad prospects, but it is very difficult to select equipment at this stage. Summarizing the practical experience in recent years, the following views are put forward. Only when breakthroughs are made in these aspects can a perfect electronic police system be truly realized. 1) The capture unit is an industrial standard digital camera with more than 2 million pixels. Possess good software control capabilities and open protocols. 2) Using industrial-grade components, it has good all-weather working ability and long-term stable and reliable operation. 3) The system uses an embedded software and hardware platform to ensure good stability. 4) Configure the Ethernet communication interface to support the remote file transfer protocol. 5) Use hard disk or memory card to save pictures locally. 6) Information management part: including two parts of the central host and management software, in the system, information collection, storage, query, statistics, exchange, backup, printing, suspicious information (such as traffic violations or accidents that have not been processed within the time limit, have not been processed within the time limit) Participate in statutory inspection or inspection, automatic comparison and real-time alarm of vehicle information such as stolen, robbed and hit and run, self-diagnosis and management of system faults, remote monitoring, remote maintenance and remote alarm, and many other important functions. As the host computer of the server, a high-performance (preferably dual CPU) industrial-grade control computer or PC server is usually selected; while the management software part is mostly based on Oracle or MS SQL System comprehensive management and application software based on large databases such as Server or Sybase. The information management part is the key to realize the system's comprehensive effectiveness of "real-time monitoring, networked deployment and control, automatic alarm, rapid response, scientific and efficient, information sharing, monitoring, deterrence, prevention and strike" and reflect the combat effectiveness of the system. Therefore, the development of an optimized electronic police system and software for managing and querying illegal images according to the needs of different users can improve the work efficiency of the traffic department, ensure traffic safety to a certain extent, and reduce traffic hazards. The system to be developed is the "Vehicle Violation Punishment System" as the background data processing system of the electronic police. It is required to be able to realize the online office function of the traffic authority, and to record and punish vehicles violating regulations by entering, processing, querying, announcing, and punishing the data obtained from electronic monitoring. Therefore, it has great room for development in modern traffic management. Even though it requires manual processing in data collection and processing, it is still much better than the previous fully manual method. It is conceivable that with the development of science and technology, it is believed that data transfer and data processing between different systems will be realized in data collection and processing in the near future. | ||
---|---|---|
2、课题任务、重点研究内容、实现途径智能道路交通信息管理系统通过对电子警察系统抓拍到的违章车辆的图像信息进行有效管理,达到惩戒违章司机,改善交通路口混乱,减少因交通违章造成的人为塞车和事故,提高交通执法的准确性和效率,节省警力并提高城市道路交通效率的目的。本系统包括四部分功能:1)违章车辆图像信息的录入;2)违章车辆信息的查询统计;3)违章车辆信息的公告与处罚;4)信息管理系统的维护与设置。充分理解课题内容及意义,掌握违规图像采集原理及方法,熟练应用JSP、SQL Server 2000等知识建立一套基于WEB的违章处罚管理系统,具备对违章图像的录入、存储、公告、处理,以及多种查询方式,公告,处罚和员工管理,权限设置等功能。重点研究内容:数据库的管理,WEB技术,图像存储,图片的传输,违章信息的录入、违章处罚、公告、信息统计、权限设置;这其中还包括了处罚决定书的打印、信息统计结果表的打印以及用户权限的实现方式,数据库的同步的细节性的问题值得仔细考虑。实现途径:按照软件工程的分析、设计方法和过程,应用数据库相关理论,运用JSP和JDBC和JavaBean技术,以SQLserver2000数据库管理系统为后台数据库支持来实现智能道路交通信息管理系统:本系统的设计采用模块化的设计方法,将系统分为违章信息的录入、违章信息公告、违章信息处罚、信息统计、用户及权限管理和包含很多系统初始化小模块的系统初始化模块,然后再整合这些模块使整个系统的功能统一在一个完整的框架下。在用户界面方面,采用页面框架导航的方式在一个页面中实现整个系统的功能,按这样的思想,用户界面的设计就采用框架的结构实现,页面分为三个框架页,顶部的为一个LOGO图标,左边的框架页设计成本系统的一个功能导航页面,相当于系统的功能菜单。用户的权限用查询数据库权限表的方式来控制导航页的内容来实现。在实现的过程中可能遇到的难题:页面设计阶段的界面设计和美工问题,由于自身缺乏美术感,因此只能在用户界面设计是多参考他人的设计,并借鉴他人成功之处,尽可能在设计中利用开放的素材资源,以及一些好的设计模板;系统用户权限的设计方式,用数据库表和应用程序相结合来实现,还是用数据库的角色来实现;系统的数据库连接问题,计划在本系统中采用JDBC—ODBC桥接器来实现连接,这就要求有相应数据库驱动程序(本系统用SQL Server2000的驱动程序),并建立起ODBC数据源,最后再用JAVA程序进行连接;至于打印的问题,我现在没想到好的解决方法,只好把它留到系统开发过程中再作处理。总之,现在系统还没有开始进行相关的具体设计和实现,因此,系统将要涉及到的各种问题,现在是不可能完全预知的,所以,只有留待到系统设计和实现阶段再进行分析,处理。报告人签名: 年 月 日 | ||
3、进度计划 | ||
序号 | 日期 | 进度安排 |
1 | 第1,2周 | 查阅资料 |
2 | 第3周 | 完成文献综述和开题报告 |
3 | 第4-5周 | 熟悉开发环境 |
4 | 第6-13周 | 系统设计与实现 |
5 | 第14-15周 | 程序调试与测试 |
6 | 第16周 | 撰写论文,准备答辩 |
7 | ||
8 | ||
4、指导教师意见指导教师签名: 年 月 日 |
附件D:
毕业设计
外文译文
指导教师评语:
指导教师评定成绩 签字:
交叉评阅教师评语:
交叉评阅教师评定成绩 签字:
学生姓名: 完成日期 20 年 月 日
教 务 处
译文:
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。由于我们想要连接Oracle数据库,我们也就需要一个支持它的驱动程序。幸运地是,我们有一个负责的主管他已经在Leland的机子上为我们做好了。
和前面说的一样,在一个数据库能被访问前,一个在程序(client)和数据库(server)之间的连接必须被打开。这包括两步:
- 装载特定厂商的驱动程序
为什么需要这一步呢? 为了确保轻便和代码重用,API被尽可能地设计来不依赖于一个数据库的版本或厂家。由于不同DBMS拥有不同的行为,我们就需要告诉驱动管理器我们想用那种DBMS,以便它能调用正确的驱动程序。装载Oracle驱动程序可以用下面的代码:
Class.forName(“oracle.jdbc.driver.OracleDriver”) - 建立连接
当驱动装载完成就可以建立连接,你建立一个实际的连接可以用:
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语句能更方便或更有效。它区别于其超类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),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语句不太适合在一行上显示,我们就把它打断成两个字符串,并且用加号连接起来以便它被编译。特别注意“INSERT INTO Sells”和“VALUES”之间的间隔。也注意我们更愿意重用相同的Statement而不是重新创建一个。
在执行executeUpdate时常常是调用DDL语句,返回的结果一般是0,在数据修改语句执行时将返回一个大于或等于0的值,这个数据表明了其间的关系。
当使用PreparedStatement时,我们将执行这样的一个语句,它首先要设定参数的值(象上面所见的那样),接着调用executeUpdate.
int 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方法。
ResultSet 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); // 移动到第三tuple
rs.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()方法来告诉它提交。
Con.commit();
在提交之前的任何地方,我们都可也调用rollback()来卷回事务,并恢复数据到上一次提交的地方(在尝试更新之前)。下面是个融合了上面观点的例子。
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);
让我们浏览这个例子理解几个方法的用法和作用。我们首先看看自动提交关闭时,接下来的几条语句需要看成一个整体。我们尝试在Sells表中插入记录(‘bar of 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)来获取以上信息。SQLExceptions是Java异常,假如不处理,会终止应用程序。SQLWarnings是SQLException的子类,但它们描述不致命的错误或不预期的情况等,可以忽略。
在Java中,预计要抛出异常或警告的语句被包含在try语句块中。如果在try语句块中的语句抛出了异常或警告,那么,在相应的catch语句中将被捕获。每个catch语句都被指明准备捕获那个异常。
下面是一个捕捉异常,使用错误情况来卷回事务的例子:
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) ;
}
既然这样,一个异常肯定被抛出,因为错误的书写导致了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() ;
if (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.java
elaine19:~$ java SQLBuilder
替换成:
elaine19:~$ javac SQLBuilder.java
elaine19:~$ 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班。Jim Zhuang在2005年夏作了一点小改动。同时感谢Matt Laue的排版改正。
2利用JSP和JDBC技术访问动态的WEB数据
这篇文章讨论用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 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(); |
---|
在现实生活中,JDBC代码没有这么简单;异常和警告情况需要处理。例子Listing 2 是相同的JDBC例子但是增加了JDBC异常和警告的处理。在这个例子中,异常和警告是简单和笨拙的,在异常情况下,我们终止操作。可是,dinally{}子句确保了资源的释放。
在这里仅仅暗示实际的处理结果。我们将在本文的后面找到更详细的内容。如果我们正在执行一个数据库更新而不是查询,我们就应该用下面的代码来替换while循环的内容:
int count = statement.executeUpdate(sqlUpdate);
executeUpdate方法返回更新语句所影响的行数。如果这些代码看起来不熟悉,你也许想花更多的时间来回顾一些关于JDBC的指南信息,在资源章节可以找到。
除了executeQuery()和executeUpdate()之外,类Statement支持一般的execute()方法。这就允许编辑一般的SQL代码,尽管处理的结果复杂很多。 |
---|
2.2 在JSP页面中使用JDBC
为了来自数据库的动态内容,我们应该怎样结合JDBC和JSP技术。
一般的规则是,好的JSP实践经验建议我们把表示模式和行为模式分离开来。这类似于在OO编程中的模型-视图-控制器(MVC)范例。这样分离的一个原因是在程序员创建的基于JSP技术的应用可能包含了模型和控制器组件,然而,视图组件是在页面设计器里编辑的。在JSP应用体系结构下,视图的角色决定了它的职责是描述,并只在JSP页面中被处理。控制器的角色是响应请求,往往扮演着servlet的角色,并且多数的JSP开发者渐渐地对在控制器角色里使用JSP页面的优越性达成了共识。模型的角色是对应用实体的行为进行建模,它典型的表现在JavaBeans组件上。
除了决定数据库在MVC范例中对应的位置之外,你有好几种在JSP页面中整合JDBC技术的选择。例如,你可以用脚本插入JDBC,用库标签插入,或把它隐藏在定制的标签或其它类中。
我们下面将看到几个不同途径的例子并讨论它们的使用方法。
2.3 一个JSP scriptlet的例子
一个新的JSP程序员很可能做的第一件事就是写一个scriptlet来访问JDBC。或许它在一些地方象在Listing 3中的那个在页面中用JDBC实现"hit counter"的例子。(这页的一个生动的版本是在JSP开发者指南的WEB站点上。)
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> |
---|
这页包含了一个scriptlet(前面突出的部分),它连接数据库,创建statement,以及尝试更新由页面URI键入的纪录。如果更新不影响任何行,这个例子中假定没有这样的行并新增一行。最后,这个scriptlet查询数据库当前命中的数并赋值给一个本地变量。更进一步,在这个JSP页面的描述部分,突出的JSP表达式被用来传递上面的值。
尽管功能正确,但这个JSP页面仍有几个问题。首先这个scriptlet并不是一个无程序页面设计师会先看到的。坦白地,甚至使程序员也不想在页面中看到这样的东西。第二,页面缺少了异常处理,那可是真实的JDBC代码必不可少的部分。第三,hit counter的执行是逐字逐句地植入的,因此任何改动都需要传播到包含hit counter 的每个JSP页面。
注意:你不可能像这样来执行一个hit counter .为每次请求改变数据库的代价是必不可少的。无论如何,这个hit counter都提供了一个查询和更新数据库的简单的例子,这说明我们可以用各种手段把你的JSP与JDBC页整合起来. |
---|
注意:你不可能像这样来执行一个hit counter .为每次请求改变数据库的代价是必不可少的。无论如何,这个hit counter都提供了一个查询和更新数据库的简单的例子,这说明我们可以用各种手段把你的JSP与JDBC页整合起来. |
---|
因此,我们该如何装配这个JSP页面。一个再三提到的方法是用库标签来除去scriptlet。在我们的下一个例子中,将看到这种可选择的解决方案。
2.4 一个用DBTags的库标签例子
一个初学JSP的程序员最先听到的事,经常是来自朋友和专家的关于不要使用scriptlet的建议。相反,他们建议你用定制的标签。定制的标签是一种手段,通过它可扩张JSP平台:定制XML风格的标签,依靠代码库,实现渴望的功能。我们将在下一个例子中,它们工作得多么良好。
Jakarta 库标签工程是Jakarta工程的一个子工程,正式实施的范围是Java Servlet和JSP 技术。
一个由Jakarta 库标签工程赞助发展的包就是DBTags定制标签库。(从前叫做JDBC标签库)。在Listing 4中的例子实现了和Listing 3中相同的hit counter,仅仅用定制标签代替了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> |
---|
我不了解你,但我有一点失望。那看起来比上面那个scriplet例子好要不清晰,并且我不知道是否有HTML设计者会因它而高兴,等等。那里出错了呢?毕竟,我们遵守了人们的建议:我们除去了scriplet,代替为定制标签。
他们没有告诉你关于标签库的是:标签设计是语言设
发展定制标签库是相当直接的,但是它确实要耗费一些时间和精力。我经常推介标签作者首先用scriptlets建立标签行为的圆型,接下来才把这些scriptlets转换为标签。一个可选的方法是用Allaire的JRun Server Tags(JST),它能使每个你的原始标签库作为一个JSP页面。JST可以在运行时可以转换这些页面为标签,因此,JST技术很明显地服务于客户端页面。尽管Allaire警告说“建立JST的目的是可移植技术,以便所有J2EE社团的成员都能平衡他们的利益”,但JST现在仅仅在JRun中可用。时间将会证明JST是否会成为开发标记更通用的工具。与此同时,我们发现scriptlet为开发标记的业务逻辑奠定了良好的基础;逻辑经调试后,我们把它迁移成为标记处理程序类。 |
---|
发展定制标签库是相当直接的,但是它确实要耗费一些时间和精力。我经常推介标签作者首先用scriptlets建立标签行为的圆型,接下来才把这些scriptlets转换为标签。一个可选的方法是用Allaire的JRun Server Tags(JST),它能使每个你的原始标签库作为一个JSP页面。JST可以在运行时可以转换这些页面为标签,因此,JST技术很明显地服务于客户端页面。尽管Allaire警告说“建立JST的目的是可移植技术,以便所有J2EE社团的成员都能平衡他们的利益”,但JST现在仅仅在JRun中可用。时间将会证明JST是否会成为开发标记更通用的工具。与此同时,我们发现scriptlet为开发标记的业务逻辑奠定了良好的基础;逻辑经调试后,我们把它迁移成为标记处理程序类。 |
---|
计。大多数标签库都是在约定的时间内,由程序员写给程序员的;这些标签的语义连接给其它的程序员。此外,还记得模型和描述的分离吗?DBTags并不是很好的支持这种分离。Sql:getColumn标签和jsp:getProperty事件很相似。它将DBTags结果直接发到输出流中。这使得很难在描述想要的表的输出流时不用DBTags。最后,注意在Listing 3和Listing 4的例子中的逻辑的不同。DBTags执行来自JDBC的更新语句的标签表示形式。只有查询才可以被找回。这意味着我们知道有多少行被更新语句所更新。因此,我们转换Update和insert语句;我们常常尝试插入一个新的记录,强迫它忽略任何错误,并在接下来执行更新。
公平地看待DBTags标签库,他并不是一个对程序员有害的标签库。除开对更新量的不足,这代码提供了一个相当优秀的JDBC计划。潜藏的问题人仍然存在;标签提供的功能少于直接转换JDBC包。不同于隐藏某些异常处理,标签库不真的提供任何从scriptlets的提取。他确实不帮助从功能中分离描述。
因此,真正的问题不在于是使用scriptlet还是使用标记;这种问题不是分离功能和表示的问题的原因,而是结果。解决方案是要以适当的说明级别上为表示页面的作者提供更高级别的功能。认为标记优于scriptlet的原因在于:根据定义,scriptlet 是编程,而标记可以表示高级概念。
2.5 对表示页面隐藏JDBC
将JDBC同JSP技术集成时,我们希望对表示作者尽可能多的隐藏该集成。在我们显现数据库概念的地方,我们希望在恰当的抽象级别上显现这些概念。这一方法引出了我们的下一个示例。
在清单5中的示例中,我们对表示页面隐藏了JDBC集成。(这个页面的 实际版本位于JavaServer Pages Developers Guide Web站点)
清单5 隐藏了JDBC的JSP页面
<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文件负责设置环境。内容可以是scriptlet、标记或只是一个taglib伪指令;只要是为表示页面建立预期环境的都可以作为内容。如果您愿意,您可以把getProperty操作替换成定制标记;例如:
This page has been hit <page:hitcounter /> times. |
---|
如前所述,这些点击计数器示例纯粹用作说明;每个页面都执行这样的数据库操作将会是不必要的开销。上面这个示例说明事实上您希望以何种方式显现点击计数器。通过把它隐藏在定制标记里,我们就把该实现彻底隐藏了起来。现在我们可以聚集点击计数运行时信息,并周期性的更新数据库(比如,在每次会话结束时)。甚至连存储方式(数据库或是别的)也对表示页面作者隐藏了。这正是我们在DevTech实现点击计数器的方式:我们利用bean类实现点击计数器模式行为。标记把该行为结合到了我们的页面里。
2.6 集成JavaBean组件
到目前为止,示例一直都相当简单,但大多数数据库操作都比这些简单的查询和更新要复杂。因此,既然我们已经讨论了把JDBC用于JSP页面的一些基本原则,就让我们用一个略微复杂些但肯定更加通用的一类应用来结束这篇文章。
这一部分的示例(下面清单9)将指出一种方法以支持Web站点上访问者提供的内容。换句话说,我们希望允许访问者读取与某一URI关联的数据库内容并撰写额外的内容。这样的内容在现在的Web站点上相当常见。同样的基本部分可用于构造:
- 评论页面,例如在http://Amazon.com找到的那些页面
- 链接页面
- 公告牌
- Wikiweb
通过由不同技术背景的设计人员编写,本例中JSP组件稍微再精细些的版本就可以实现看上去截然不同的Web页面。这些页面看上去的唯一的相同之处就是用于访问者撰写内容。
我们的annotation(注释)示例使用HTML表单。HTML表单用于JSP时,使用属性映射到表单域的bean变得方便了。这使setProperty标记可以变戏法:
清单6 映射到表单的Bean实例
<%-- 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技术设计方面的一个过人之处。不幸的是bean和JDBC之间的集成根本不是无缝的,因此我们针对DevTech的JDBC工作开发了一个包,它不仅提供了bean和JDBC的集成,而且还有必要的异常处理,从而使程序员不必应付这些细节。
映射bean和ResultSet 示例使用com.devtech.sql以使说明简洁。示例使用Java Reflection和Introspection,依靠列名及属性名提供JDBC数据和bean属性间的映射。您可以把DevTech包替换成自己的代码。 |
---|
映射bean和ResultSet 示例使用com.devtech.sql以使说明简洁。示例使用Java Reflection和Introspection,依靠列名及属性名提供JDBC数据和bean属性间的映射。您可以把DevTech包替换成自己的代码。 |
---|
映射bean和ResultSet 示例使用com.devtech.sql以使说明简洁。示例使用Java Reflection和Introspection,依靠列名及属性名提供JDBC数据和bean属性间的映射。您可以把DevTech包替换成自己的代码。 |
---|
annotation(注释)示例使用com.devtech.sql包中的两种查询和更新方法。这里用到的查询方法传递一个bean类、一个SQL查询和一个Object数组填充查询中的占位符。在这种情况下,仅有的占位符是给页面的URL的。结果是一个数据库游标对象,它必须是一种迭代器。
清单7 数据库游标对象
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 ?"); |
---|
这个查询方法的有趣之处在于指定类型的bean将会为您实例化,只要bean属性名同ResultSet中的列名相对应,属性值就会被自动设置。每次您用游标选择下一行时,bean的属性就会根据ResultSet被自动设置。
用到的这种特殊更新方法有一个bean实例、一个String数组及一条update语句作为参数。String数组值规定了用来填充更新中的占位符的预期bean属性。在这种情况下,page、author和annotation属性是根据bean选择的。
清单8 更新方法
int count = dataBase.update(annotationBean, new String[] { "page", "author", "annotation" }, "insert into annotations(page, author, annotation) values(?, ?, ?)"); |
---|
我们的JSP页面示例annotations.jsp如清单9中所示。高亮的部分指出两个可以用定制标记替换的scriptlet,如清单 10 中所示。一些为页面设计者提供帮助的JSP组件、把动态内容放到页面上去的getProperty操作以及标准HTML组成了页面的剩余部分。使用JSP注释的原因是因为JSP注释是私有的,不会出现在输出流中。
清单9 annotation(注释)的JSP页面
<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> |
---|
定制标记等价程序清楚,但不提供信息:
清单10 定制标记等价程序
<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> |
---|
我们在这个示例中使用scriptlet只是要让您(一位程序员)知道正在发生的事情。如果用陈述性的标记替换scriptlet,那么页面设计者会很清楚,但您却一头雾水。
逻辑并不复杂。annotation.getCursor()调用能得到同服务器的连接、发出查询并在结果集建立一个数据库游标对象annotations。每次调用annotations.next()时,从结果集中取出一个新行,其中的值移到bean里,方法返回的正是这个bean的引用。所用的这个特殊的next()方法使用一个要植入的bean参数。虽然我们本可以使游标为每一行实例化一个新的bean,但反复使用一个bean更加高效。
请注意真正的查询及更新都没有在表示页面中出现。被包括的页面设置表示页面环境,也包括setProperty和update操作。这些操作独立于表示页面;只有注释bean的属性所包含的contract是重要的。这遵守了将表示与模式行为相分离的策略。页面设计者完全有能力更改表示是如何呈现的,但无从得知数据库是如何集成的。如果更改在数据库更新或查询时生效,就应当由JSP程序员负责。
2.7 总结
本文对结合使用Java Server Page、JavaBean和JDBC技术并通过关系数据库生成动态内容的进行了总结性介绍。我们从对于JSP程序员新手来说最显而易见的方法(scriptlet)开始。我们看到不加控制的使用scriptlet是如何使逻辑和表示纠缠在一起的,使两者都难以维护。我们还看到标记库并不一定会改善 MVC 分离,如果用编程术语来表示标记,则页面设计人员可能无法理解使用这样的标记的页面。最后,我们看了更为复杂的示例,这些示例说明了几种使数据库访问与内容表示分离的途径。
现在您应该对在对页面设计人员隐藏真实的数据库访问的同时如何把数据库内容集成到一个Web站点中有一些基本概念。还请注意,对您(一个程序员)而言,几乎不含信息的那些示例是最适合于页面设计人员的示例。当您为JSP解决方案制定计划时,千万要为页面设计人员设身处地地想一想。
重庆大学本科学生毕业设计
智能道路交通信息管理系统的设计与实现
学 生:李小江
学 号:20024417
指导教师:石 锐 副教授
专 业:计算机科学与技术
重庆大学计算机学院
二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
摘 要
伴随着社会经济的发展,交通在人们经济和社会活动中扮演着越来越重要的角色。因而,交通管理的水平和质量就和我们的日产生活紧密相连,并且直接影响着投资的环境和城市的面貌。因此,每个城市都做了很多关于改善交通和发展智能交通系统(ITS)的思考。电子警察系统成为了一个非常重要的部分,它在提高安全系数,警觉驾驶员的意识,结束车辆闯红灯和栏杆的显现。
本次设计的这个信息管理系统是智能交通系统(ITS)的一个后台子系统。它根据电子警察系统传来的违章图片信息,来处理违章信息。本系统可以帮助警察记录和管理车辆的违章信息,并且可以将违章信息进行公告、处罚,以便使道路交通更加畅通。本智能道路交通信息管理系统主要包括:违章信息录入,违章信息公告,违章出发,信息统计以及系统初始化和用户管理等功能。
软件的设计采用B/S模式进行,用DreamWeaver MX开发用户界面,用JSP+JavaBean技术实现业务逻辑,同时以SQL Server2000作为后台数据库。
关键词:管理信息系统,违章处罚,智能交通,JSP,JavaBean
ABSTRACT
With the economic development of society, traffic is becoming more and more important in human economic and social activities. The level and quality of traffic management is associated tight with our daily life, and take direct effect with the investing environment and city appearance. So, each city has thought much on improvement of traffic and the development in Intelligent Traffic System ITS. Electronic Police System become a most important part, it is taking more and more important effect in improving security coefficient and regulating drivers' driving consciousness and putting an end to rush away while the traffic indicator light is red and beating robbing of cars etc.
This information management system is only a background subsystem of the Intelligent traffic System.It deal with the peccancy information according to the picture from the Electronic Police Sysetem.This system can note the cars’ peccancy informatin,help police to manager the peccancy informatin and punish the drivers make the traffic become well. The Intelligent traffic information management system include:the peccancy information input subsystem,the system initiation subsystem,the peccancy punish subsystem, the peccancy affiche subsystem and the information Statistic subsystem and user manager subsystem,and so on.
Software design used B/S architecture, using DreamWeaver MX develop user interface, using JSP+JavaBean achieve system operational logic, and use Microsoft SQL Server 2000 database management system as a backgroud support.
Keywords: Management Information System (MIS),Peccancy and punish,Intelligent Traffic System (ITS),JSP,JavaBean
目 录
中文摘要I
英文摘要II
1 引言1
2 智能交通系统介绍2
2.1 智能交通系统(ITS)概述2
2.2智能交通管理系统的应用现状及发展趋势3
3 开发方法、技术、工具4
3.1 系统的开发方法4
3.2 开发技术4
3.2.1动态网页技术简介4
3.2.2 JSP技术简介4
3.3开发工具5
3.3.1网页制作工具Deamweaver MX20046
3.3.2 SQL6
3.3.3 Eclipse7
4 需求分析10
4.1 设计目标10
4.2 智能道路交通信息系统描述10
4.2.1 功能模块简单描述10
4.3 系统的数据流程分析12
4.3.1 数据流程分析概述12
4.4.2 数据流程图12
5 数据库系统及设计17
5.1 数据库的引入17
5.2 数据库E-R模型18
5.3 数据库表结构设计19
5.4 数据库的完整性和安全性25
5.4.1 数据库的完整性25
5.4.2 数据库的安全性25
6 系统主要功能模块的设计与实现26
6.1 系统设计概述26
6.1.1 系统设计的原则与内容26
6.1.2 系统设计的基本方法26
6.2 系统主要功能模块结构设计27
6.2.1 系统主要功能模块结构27
6.2.2 用户管理子系统27
6.2.3 用户组管理子系统28
6.2.4 违章信息录入子系统29
6.2.5 违章信息公告子系统32
6.2.6 违章处罚子系统32
6.2.7 信息统计子系统33
6.3系统重要的程序实现简介36
6.3.1 数据库的连接实现36
6.3.2 违章图片存储方式37
7 系统测试38
7.1 软件测试的目的和原则38
7.2 系统测试39
7.2.1 JSP的中文乱码问题39
7.2.2 表单和表格打印问题39
7.2.3 数据库时间字段以及页面中的时间显示问题39
7.3 软件运行与安装40
7.3.1 J2EE应用程序的构建与部署40
7.3.2 具体运行过程40
8 结论41
9 致谢43
参考文献44
1 引言
当前,我国正处于经济高速发展时期,城市交通速度发展较快,但从总体上看,形势不容乐观,交通道路及设施需求长期持续增长,交通供给一直短缺,供需矛盾突出;受财力制约,交通基础设施的建设速度难以适应交通需求增长的要求;汽车进入家庭,使得本来就紧张的城市交通面临着更大的困难;交通运输在能源消耗中所占的比重不断增加,特别是对石油资源的依赖和消耗将进一步加剧我国能源供给的结构性矛盾;由于城市人口,特别是流动人口急剧膨胀,使交通出行量大幅度增长;城市交通基础设施的增长速度落后于交通流量的增长;城市居民出行方式结构不合理,公共交通呈萎缩状态;机动车大幅度增长,与非机动车混行,加剧了城市交通的紧张;城市交通的综合治理有待于进一步加强;交通环境问题日趋严重。主要表现以下两个方面:
①交通基础设施供应严重不足,不能满足交通发展的需求
随着车辆保有量的高速增长,道路负荷增加,尤其在发展较快的城市交通基础设施,包括汽车及自行车行驶的道路、人行道、人行横道等都严重不足。以广州为例,改革开放以来,广州市城市道路面积与总长度都有了大幅度增长,自1990年以来,两者的增长率分别是13.87%和12.82%,但仍然低于机动车的年均增长率25.4%。又以北京市为例,机动车已于2003年8月初突破了200万辆,预测到2010年,这个数字将有可能达到380万,其中家用轿车为280万,平均每个家庭拥有汽车0.53辆,而2015年机动车保有量将达到500万-600万辆之间,虽然与发达国家同等规模的城市相比机动车总量少得多,但高峰时其机动车的平均时速只有十几公里,交通拥堵现象十分严重,给居民出行带来了极大不便。
②交通管理水平低,交通需求管理不善
随着经济的发展,我国交通拥堵的频率和时间明显增加,导致车辆运动速度降低,加速、减速、怠速频繁,运行工况恶化。研究调查表明,北京与广州市区的平均车速仅在23km/h左右,机动车低速运行时间加长;而在早晚的高峰期,北京市区道路平均车速不足20km/h。
2 智能交通系统介绍
2.1 智能交通系统(ITS)概述
我国城市交通面临巨大的挑战,而其对策主要是规划及政策手段、工程设施
建设手段、运行管理手段,以及采用高新技术改造传统交通运输系统的手段,智能交通系统(ITS -Intelligent Transportation System)是解决上述矛盾的有效途径。智能交通系统处于当今世界上交通运输科技的前沿,它是在较完善的道路设施基础上,将先进的电子技术、信息技术(IT)、人工智能(AI)、地理信息(GIS)、影像、计算机技术、有线/无线通信(如ATM,GPS,GPRS,GSM,TETRA)、传感器技术和系统工程技术集成运用于地面运输的实际需求,建立起全方位、实时准确、高效的地面交通系统,能对各种交通方式进行现代化、科学化的智能管理。智能交通系统的出现是为了能够改善混乱的交通状况,减少拥堵,提高运输效率并提高交通的安全性,对于交通环境的改善则是随着在实践中的应用而被提出的.在人类生存环境受到严重威胁的今天,积极开发ITS对于改善环境有着独特的意义。
首先,ITS给出行者提供可靠的交通信息,在家中或在其它任何地方的人均可使用个人出行帮助系统来获取自己所需的相关信息,以帮助他选择出符合其出行预算和时间要求的交通工具与出行路线。导航系统将引导司机到达目的地,司机将不断地接收到前方有关交通状况的信息。司机与外界完全相通,出行变得容易、安全和舒适。交通信息数字化很容易与其他服务系统一体化,在进入一个城市前,司机被预先告之停车场位置以及如何与公交相接,他可以预定停车位;其移动通讯可以直接进入Internet网,自动访问所选择服务(如餐、旅馆等)的站点另外,通过与相邻交通区域信息的交换,交通管理水平将会有很大提高,减少了由于缺乏信息而造成的不必要的延误与等待。
其次,提供引导信息,大幅度减少交通阻塞,提高交通安全。与ITS控制中心相连的路况监控设备对路网交通状况进行实时监控,借助人工智能的帮助,控制中心将所连续监控的路网信息进行整合处理,从而提出整个路网的优化运行方案。与此同时,司机接收到与路网优化运行方案相应的引导信息,他可以根据引导信息选择的行车路线,避开行车拥挤的路段,选择快捷的行车路线,从而大幅度提高现有路网基础设施的使用效率和安全性。
2.2智能交通管理系统的应用现状及发展趋势
随着改革开放的不断深入、经济的高速发展,人民生活水平的日益提高,各大城市的机动车辆和驾驶人员数量急剧增加。由于道路建设的速度远远赶不上机动车辆和驾驶人员的增长速度,从而导致交通拥挤、违章严重、道路交通事故时有发生,严重影响了市民出行和企事业单位的生产及公务活动。
除了加强道路建设外,利用先进的科学技术、树立先进的管理观念,在现有的道路交通设施基础上,进行城市交通的科学化、规范化管理,建设现代化的交通指挥中心和管理系统是投资少、见效快的好办法。
智能道路交通信息管理系统的主要成分就是电子警察系统电子警察是“智能电子警察监测系统”的简称,它是一套高科技电子设备,最初是为维护交通执法提供了一种先进手段。以往许多城市在某些交通场合,由于没有有效的执法手段造成执法困难,例如:无人值守的路口;单行线;禁行、限时道路;限车型车道;主、辅路进出口;紧急停车带;公交专用道;违章 超速等场合检查执法困难,特别是在夜间,违章行车现象经常发生,严重破坏了交通秩序。该设备能够对违章车辆进行自动判断与图像记录。执法部门可以根据该系统所提供的车辆违章过程的图像记录,对违章司机进行追究和处罚。
几年来,各大中城市均在此方面做过有益的尝试,但使用情况总的来并不理想。主要原因是现有的电子警察抓拍设备存在许多缺陷,限制了它发挥更大的作用。从目前市场情况来看,还没有哪一家公司提供的系统和设备能够真正满足用户期望,用户对系统现状也看法各异。电子警察设备具有非常广阔的前景,但现阶段在设备选型方面却难度很大。
本次毕业设计的主要任务完成智能道路交通信息管理系统的设计与实现。本系统,通过对电子警察系统抓拍到的违章车辆的图像信息进行有效管理,达到惩戒违章司机,改善交通路口混乱,减少因交通违章造成的人为塞车和事故,提高交通执法的准确性和效率,节省警力并提高城市道路交通效率的目的。
本系统包括四部分功能:①违章车辆图像信息的录入;②违章车辆信息的查询统计;③违章车辆信息的公告与处罚;④信息管理系统的维护与设置。
3 开发方法、技术、工具
3.1 系统的开发方法
智能道路交通信息管理系统,根据其需求的要求和特点,采用在B/S模式下开发,在开发过程中采用面向对象的系统开发方法进行系统开发,根据系统的特性按照结构化程序设计思想与面向对象的设计思想和方法相结合的方式来进行系统设计。
依据系统的总体功能,将系统划分成多个模块进行独立的实现,根据各个模块的不同情况进行具体的分析和设计,最后对各个模块进行整合,建立一个统一模块来实现各个模块之间消息的传递、相互的协助,以及整体功能的完全展现。
3.2 开发技术
3.2.1动态网页技术简介
在B/S模式下操作Web数据库是通过数据库的网络技术ASP、JSP等实现的,这就要用到动态网页的技术。动态网页即使在网页文件中加入脚本语言动态的执行用户的请求。
传统的静态网页既是用HTML语言编写的网页文件格式,文件扩展名为.htm或.html,当用户请求该页的时候服务器便将此页下载到客户端的浏览器显示出来。而动态的网页中嵌入了部分程序代码,当用户请求该页的时候Web服务器会将此页传递给Web应用程序服务器,应用程序服务器根据用户提供的参数处理程序代码,转化为相应的HTML代码,返回给Web服务器,再下载到客户端浏览器显示。
3.2.2 JSP技术简介
JSP(Java Server Pages)是一种运行于Web服务器端的脚本语言,是开发Web动态网页快速而有效的工具,是基于java语言的Web开发技术中最具有代表性的解决方案。JSP是基于Java的脚本技术,可用于创建跨平台、跨Web服务器的动态网页。使用JSP不仅能够制作像HTML一样的静态网页,还能制作包括动态数据的网页。
要开发JSP文件,必须要有Web服务器和浏览器、应用程序服务器、数据库连接驱动和Java编程环境。
①Web服务器
在Internet上,Web服务器为客户提供信息服务,服务器的基本信息单位称为网页(Web页),由HTML写成。客户端使用称为浏览器的软件显示HTML文档的内容。客户端和服务器之间使用超文本传输协议(HTTP,HyperText Transfer Protocol)传送信息。HTTP协议是实现Web服务器和浏览器之间的通信、交流信息的协议。当用户激活一个链接后,服务器使用HTTP协议送回约定好的格式文件,文件信息在客户端上通过浏览器显示相应的信息。如果服务器和浏览器都遵守HTTP协议,则任何一个浏览器和服务之间都能够进行通信。
目前广泛使用的Web服务器有IIS、Apache,浏览器有Interent Explorer、Netscape等,我在设计和调试中使用的Web服务器是Apathe,浏览器是Interent Explorer 6.0。
②应用程序服务器
应用程序服务器既是用来处理程序代码的服务器,它将网页文件中的Java语言代码根据用户提供的参数进行处理并返回给Web服务器。
目前广泛使用的Java脚本应用程序服务器有Tomcat、Jboss等,我使用的是Apthe Tomcat 4.1。
③数据库驱动
数据库驱动既是连接数据源的驱动,像系统的ODBC、JDBC等,我在设计的时候是使用JDBC-ODBC桥接器来连接数据源。
④Java编程环境
因为JSP是Java脚本语言技术,当然在开发的时候需要有Java的编程环境,目前用得最多的就是J2sdk,我在设计中使用的是SUN公司的j2sdk-1_5_0_5-windows-i586-p。
JSP是用Java语言写成的,Java语言具有跨平台的特性,所以JSP最适合于编写服务器端执行的程序。加上JSP可以结合静态的HTML语法,使得JSP的设计方式简洁而直观。
3.3 开发工具
随着计算机在信息系统中的广泛应用,对各种软件工具的研究十分迅速,各种各样的软件及程序的自动设计、生成工具日新月异,为各种信息系统的开发提供了强有力的技术支持和方便的实用手段。利用这些软件生成工具,可以大量减少手工编程环节的工作,避免各种编程错误,极大地提高系统的开发效率。一般来说,比较流行的工具有:一般编程语言工具、数据库系统工具、程序生成工具、专用系统生成工具、及面向对象编程等。
本系统采用HTML+JSP++JavaBean+SQLServer2000进行B/S模式下的B端的界面的开发,以及的S端的业务处理逻辑程序的实现和后台数据库的开发。在开发的过程中使用了Deamweaver MX 2004、Eclipse3.1、Tomcat 4.1、SQLServer2000等开发工具。
3.3.1网页制作工具Deamweaver MX2004
当前流行的网页制作工具有很多,它们也都有各自的特点。出于没有网页制作经验和方便站点管理方面的考虑,我载设计中选择了Deamweaver MX 2004中文版这款开发工具。它很容易上手,并且对站点的管理非常的方便。
①建立一个Deamweaver站点:安装完成后启动Deamweaver MX 2004中文版,选择“站点”>“管理站点”,出现“管理站点”对话框;单击“新建”按钮,出现“站点定义”对话框;单击“基本”选项卡以使用“站点定义向导”,它将引导您逐步完成设置过程;单击“高级”选项卡以使用“高级”设置,它使您可以根据需要分别设置本地、远程和测试文件夹。
②代码设计和视图设计的分离。Deamweaver将代码的设计和视图的设计分开,可以在视图设计时很快捷的设计出很美观大方的界面,并在这个界面下能很好的进行代码的设计。
3.3.2 SQL
SQL是一种综合的、通用的、功能极强的关系数据库语言(关系数据库是所有用户可见的数据都严格按表的形式组织起来的表,且所有库操作都针对这些表的数据库),它包括数据定义(Definition)、数据操纵(Manipulate)、数据管理(Management)、存取保护(Access Protection)、处理控制(Control)等多种功能。利用表(table)、索引(index)、码(keys)、行(rows)、列(columns)等来确定存储位置。
SQL语言本身并不是一个很完整的编程语言,例如它不支持流控制等。一般它都与其他编程语言(如DELPHI、PowerBuilder、VB、PB、JAVA等)结合来使用。
SQL的主要特点在于:
①一体化的特点
SQL语言能完成定义关系模式,录入数据以建立数据库、查询、更新、维护、数据库重构、数据库安全控制等一系列操作要求,用SQL可以实现数据库生命期当中的全部活动。由于关系模型中实体与实体间的联系都是用关系来表示,这种数据结构的单一性保证了操作符的单一性。
②统一的语法结构,多种使用方式
SQL有两种使用方式,一种是联机使用方式,另一种是嵌入程序方式。大多数的程序接口都采用嵌入的SQL语言。虽然使用方式不同,SQL语言的语法结构是一致的。这使得用户与程序员之间的通信得以改善。
③高度非过程化
在SQL中,只需用户提出“干什么”,而无须指出“怎么干”,存取路径的选择和SQL语句操作的过程由系统自动完成。
④语言简洁
SQL语言十分简洁,语法简单。标准SQL中,完成核心功能只用了6个动词(CREATE、INSERT、UPDATE、DELETE、SELECT、GRANT)因此简单易学。
⑤浏览器/服务器(B/S)结构
SQL能使应用程序采取浏览器/服务器结构。交互式查询、报表打印和应用程序称为数据库的“前端”,在个人机上运行,存储和数据管理的后端数据库引擎在服务器上运行,在此情况下,SQL作为用于用户交互的前端工具和用于数据库管理的后端引擎之间通信的桥梁。
⑥支持异类复制
它可以将SQL Server数据复制到其他的数据库中,包括Access、Oracle、Sybase和DB2,并采用ODBC作为其连接机制。
⑦Internet数据库功能集成
支持数据库信息自动发布到HTML文档,同时结合Microsoft Internet Information Server和SQL Server Internet Connector这两个产品/技术,使用户得到完整的Internet数据发布的能力。
3.3.3 Eclipse
Eclipse这样功能完整且成熟的开发环境,是由蓝色巨人IBM所释出。IBM花了4千万美金来开发这个IDE(Integrated Development Environment)。第一版1.0在2001年11月释出,随后逐渐受到欢迎。
Eclipse的主要特点在于:
①开放的可扩展的IDE
Eclipse平台是一个开放的可扩展的IDE。Eclipse平台是建造模块和构造并运行集成软件开发工具的基础。Eclipse平台允许工具建造者独立开发与其他工具无缝集成的工具,用户甚至无须去分辨一个工具功能在哪里结束、而另一个工具功能在哪里开始。
②成功的底层图形界面API
从Java诞生至今,已经在太多的领域取得成功,然而它却很少在图形界面程序上崭露头角。究其原因,Java语言缺省的图形界面开发包AWT和SWING实在是难辞其咎,无论速度和外观,它们都难以让人接受。如今,Eclipse组织编写的SWT开发包,为Java程序员提供了AWT和SWING之外的一个更佳的选择。
SWT本身仅仅是Eclipse组织为了开发Eclipse集成开发环境所编写的一组底层图形界面API。或许是无心插柳,又或是有意为之,至今为止,SWT无论是在性能和外观上,都超越了Sun公司提供的AWT和SWING。目前Eclipse IDE已经开发到了2.1版本,SWT已经十分稳定。
③强大的插件加载功能
可以通过不断地加载插件来实现同其他制品的合作。整个Eclipse体系结构就像一个大拼图,可以不断地向上加插件,同时,现有插件上还可以再加插件,进而实现功能的扩展。目前,Eclipse已经开始提供C语言开发的功能插件。更难能可贵的,Eclipse是一个开放源代码的项目,任何人都可以下载Eclipse的源代码,并且在此基础上开发自己的功能插件。也就是说未来只要有人需要,就会有建立在Eclipse之上的COBOL,Perl,Python等语言的开发插件出现。同时可以通过开发新的插件扩展现有插件的功能,比如在现有的Java开发环境中加入Tomcat服务器插件。可以无限扩展,而且有着统一的外观、操作和系统资源管理,这也正是Eclipse的潜力所在。
④可以通过导入一些CVS相关的插件来实现版本管理的便易性
Eclipse平台提供了对于直接从工作区进行团队开发操作的支持。这种支持允许开发人员并发地与几个独立的资源库以及不同版本的代码或项目进行交互。工作区中的资源允许团队支持组件处理版本和配置管理问题。当然,单个工作区也可以同时访问不同类型的资源库。Eclipse平台并没有提供它自己的代码管理解决方案,它总是依靠外部系统。Eclipse平台只对一个(但也是最流行的一个)源代码管理系统提供内置支持——并发版本控制系统CVS。
Eclipse提供了强大的个人版本管理机制,每一次被保存的更改都可以得到恢复,而且可以精确到每一个方法的版本恢复。操作也十分方便,在任何一个能看到所要操作文件的观察窗口中,例如资源浏览窗口,选中该文件,单击右鼠标键,选择Compare with或Replace with即可。如果是恢复已经被删除的方法,则可以选择Add from local history,之后相应的本地历史记录就会显示出来,按照用户本人的需求找到相应的版本就可以了。强大的个人版本管理功能为程序员提供了更多的信心——只管编下去,任何不小心的错误都可以恢复到从前的状况,在Eclipse下开发,是有“后悔药”的!
⑤充分的帮助文件
值得提出的是,在下载了Eclipse的多国语言翻译包之后,所有的菜单和联机帮助都已经翻译成了中文,使用起来非常方便。
4 需求分析
4.1 设计目标
该软件必须尽量达到人力与设备费用的节省,能够最大限度的利用现有资源,降低系统开发费用,并且使软件的数据处理速度和效率有明显提高,降低人员工作负担。完成软件的设计,实现本系统满足用户的需求。基本功能的略缩用例描述如下所示:
图4.1系统简要用例图
4.2 智能道路交通信息系统描述
4.2.1 功能模块简单描述
智能道路交通信息管理系统,在权限方面主要是分为两部分,普通用户和系统管理员。系统管理员通过增加,修改,删除,用户或用户组,来创建和管理不同权限组,以及不同的用户;同时系统管理员也可以具有一般用户能具有的一切权限。普通用户通过用户帐号和密码登陆该系统后,可以进行系统工作所要求的一些标准设置的增加,修改,查询,删除(如支队管理,大队管理,违章行为管理等);也可以根据他的权限进行相应的处理(如信息录入、公告、处罚、统计,打印等)。该系统可大致分为下表所示的模块:
系统简要功能模块表
表4.1
序号 | 模块名称 | 模块标识 | 简要功能描述 |
---|---|---|---|
1 | 用户验证 | Login | 用于用户登陆验证 |
2 | 用户管理 | UsermManager | 用于管理员管理用户 |
3 | 功能列表 | Left_nav | 导航树 |
4 | 系统设置 | Mid_tools | 进行开始工作的预先设置 |
5 | 违章信息录入 | xinxi | 用于查看违章图片,录入违章信息 |
6 | 违章公告 | Gonggao | 用于对违章车辆进行信息公告 |
7 | 违章处罚 | ChuFa | 用于对违章车辆进行处罚处罚信息保存,打印 |
8 | 信息统计 | XinXi_TJ | 对一些信息进行分类统计,报表打印 |
9 | 用户组管理 | Group | 用于管理用户组以及权限 |
其中系统设置分为:支队管理、大队管理、违章行为设置、违章地点设置、处罚地点设置、行政区划等10多个模块。
4.3 系统的数据流程分析
4.3.1 数据流程分析概述
数据流程的分析是对业务流程分析的深化,主要工作是隐去实物流,抽象出信息流,绘制出数据流程。并对各种数据的属性和各项处理功能,进行详尽的数据分析,为下一步的程序设计做准备。
数据流程分析要求弄清这些流动数据的属性、存储情况和对数据的查询要求,并给与定量的描述和分析。其中包括:
①绘制数据流程图:它是分析阶段所提供的重要的技术文件之一,反映了系统内部的数据传递关系。是对系统的一种抽象和概念化,它只表示数据、功能之间的关系,不涉及如何实现。
②数据分析:其目的是弄清数据流程图中、出现的各种数据的属性,存储情况和查询的要求,对数据予以定量的描述和分析。数据分类是指对数据项予以定义,并根据总的属性将数据项归纳到其应有的类目中去。
③数据属性分析:根据其属性可以正确的确定数据与文件的关系,通常是具有固定属性的数据存放在主文件中,把具有变动属性的数据存放在周转文件或处理文件中。
4.3.2 数据流程图
管理业务调查过程中的管理业务流程图形象地表达了人事管理过程中信息流动和存储的过程,但仍旧包含了一些物理内容,要实现计算机网络进行信息管理,还必须进一步舍去物质因素,收集相关资料,绘制系统的数据流程图。数据流程图能精确地在逻辑上描述系统的输入、输出和数据存储等功能,是描述管理信息系统逻辑模型的最主要的工具。
经过对智能道路交通信息管理系统的分析以及用户的需求分析,得到本系统的数据流程图,如下:
图4.2 顶层DFD
图4.3—第二层DFD
图4.4 第二层管理员管理子系统DFD
图4.5 第三层管理员管理子系统DFD
图4.6 第三层支队管理子系统DFD
图4.7 第三层公告管理子系统DFD
图4.8 第三层违章信息录入子系统DFD
图4.9 第三层违章处罚子系统DFD
图4.10第三层违章处罚子系统DFD
图4.11第三层信息统计子系统DFD
5 数据库系统及设计
数据库设计是管理信息系统设计的核心。数据库设计是在一个给定的应用环境下,构造最优的数据模式、建立起数据库,使之能有效地存储数据,同时构造出应用系统以支持各种应用的信息处理需求。
5.1 数据库的引入
数据库技术从60年代中期至今只有不到40年的历史,但其发展速度之快是其它技术所不及的。它已由第一代的层次型、网状型数据库,第二代的关系型数据库发展到今天以面向对象为主要模型的数据库,即第三代数据库。数据库技术和网络通信技术、面向对象编程技术、并行计算机技术、人工智能技术相互融合、相互渗透,促进了数据库技术的广泛应用。
数据库(Database),是按照数据结构来组织、存储和管理数据的仓库,是用于查询的大量数据的存储区域。使用数据库可以带来许多好处:如减少了数据的冗余度,从而大大地节省了数据的存储空间,实现数据资源的充分共享等等。此外,数据库技术还为用户提供了非常简便的使用手段,使用户易于编写有关数据库应用程序。特别是近年来推出的计算机关系数据库管理系统,操作直观,使用灵活,编程方便,功能强大,环境适应广泛,数据处理能力极强。
数据库的设计是指对一个给定的应用环境,构造数据库模式,建立数据库及其应用系统,满足各种用户需求。作为信息资源开发、管理和服务的一种有效的手段,数据库技术的应用已越来越广泛,从小型的单项事务处理系统到大型的信息系统大都用先进的数据库技术来保持系统数据的安全性、完整性和共享性。对一个实际的系统来说,数据库表的设计在遵循数据库理论的同时,必须能用开发工具来实现用户在各方面提出的功能要求。
一个真正的、完整的站点是离不开数据库的,因为少量的数据,如网页访问人数等完全可以存储在文本文件中,但实际应用中,需要保存的数据远不止这一点点,而且这些数据之间往往还有关联,利用数据库来管理这些数据,可以很方便的查询和更新。可以说一个动态网站的建设是离不开一个设计最优的数据库的。我们现在可以使用的数据库有很多种,如:Fox数据库(.dbf)、Access数据库(.mdb)、DB2、Informix、Oracle和SQL Server等等,在本次设计中,选择了作为SQL Server后台数据库工具,并提供了许多标准的关系数据库管理功能的支持。
5.2 数据库E-R模型
智能道路交通信息管理系统有如下一些主要E—R模型,下面具体介绍三个主要的关系-模型。
①用户以及用户组权限E—R模型:
图5.1 用户权限E—R图
②支队和大队的E—R模型:
图5.2 支队大队权限E—R图
③违章图片记录、违章信息、处罚信息的E—R模型:
图5.3 违章处理E—R图
5.3 数据库表结构设计
数据库的逻辑结构设计的质量将直接影响到系统的实现效果。根据道路交通信息管理系统数据库结构特点,在设计本系统的数据表时,充分考虑了以下几个方面的问题:
①数据冗余引起的数据不一致将给用户带来很大的麻烦,以至造成用户难以觉察的错误。因而表格的设计要尽量满足数据库设计的3NF要求,尽可能避免数据冗余。
②SQL Server2000数据库管理系统要求每个表的主键值必须唯一,在设计每个表的主键时,必须充分注意这一点,有些表的主键,可以设计成多个字段。
③应用系统的容量体现在某些表的某些字段上,在系统设计时应注重系统容量的设计。
④根据系统的数据流图进行系统数据分析,导出系统的数据库结构,借助PowerDesigner9.0建立数据库模型分析各表之间的对应关系,合理地设计数据表和定义表中的数据类型。
⑤根据各模块的实际要求,事先设计好表的主键、外键、索引、约束、规则、触发器、存储过程等,便于模块对公用数据表的 统一引用,并保证数据的完整性。
智能道路交通信息管理系统所需的表主要包括了:
用户登录信息表(UserBar)、学生详细信息表(UserDatailBar)、支队信息表(DatachmentBar)、大队信息表(LargeTeamBar)、违章地点信息表(PAddressBar)、处罚结果信息表(PshResultBar)、车辆类型信息表(CarCardBar)、特殊车辆类型信息表(TCarBar)、行政区划信息表(WardBar)、银行名称表(BankBar)、行政复议处信息表(WSpaceBar)、条例信息表(MByelawBar)、号牌种类表(SCarBar)、处罚地点信息表(PshAddrBar)、本地车辆标识信息表(LocalSignBar),外地车辆标识信息表(WaiDiBar)、违章信息表(WZXinXiBar)、移动电子警察违章图片信息表(QueryRSBar)、卡口违章图片信息表(PortPicBar)、处罚信息表(chufaBar)、用户组权限信息表(quanxianbar)、用户组信息表(UserGroup)共22个表。
各表的详尽描述如下:
用户登录信息表(UserBar)
表5.1
列名 | 数据类型 | 长度 | 可否为空 | 说明 |
---|---|---|---|---|
UserID | varchar | 20 | NOT NULL | 用户名(主键) |
UserPassWD | varchar | 20 | NOT NULL | 用户密码 |
UserGroup | varchar | 50 | NOT NULL | 用户组(外键) |
用户详细信息表(UserDatailBar)
表5.2
列名 | 数据类型 | 长度 | 可否为空 | 说明 |
---|---|---|---|---|
UserID | varchar | 20 | NOT NULL | 用户名(主键,外键) |
PoliceID | varchar | 20 | NOT NULL | 警号 |
UserName | varchar | 10 | NOT NULL | 姓名 |
UserSex | varchar | 4 | NOT NULL | 性别 |
大队信息表(LargeTeamBar)
表5.3
列名 | 数据类型 | 长度 | 可否为空 | 说明 |
---|---|---|---|---|
LTID | varchar | 20 | NOT NULL | 大队编号(主键) |
LTName | varchar | 50 | NOT NULL | 大队名称 |
ID | varchar | 20 | NOT NULL | 支队编号(外键) |
支队信息表(DatachmentBar)
表5.4
列名 | 数据类型 | 长度 | 可否为空 | 说明 |
---|---|---|---|---|
ID | varchar | 20 | NOT NULL | 系别代码(主键) |
Name | varchar | 20 | NOT NULL | 系别名称 |
PassWD | varchar | 20 | NULL | 转递密码 |
Address | varchar | 50 | NULL | 转递地址 |
违章地点信息表(PAddressBar)
表5.5
列名 | 数据类型 | 长度 | 可否为空 | 说明 |
---|---|---|---|---|
PAddressID | varchar | 10 | NOT NULL | 编号(主键) |
PaddressName | varchar | 40 | NOT NULL | 违章地点 |
处罚结果信息表(PshResultBar)
表5.6
列名 | 数据类型 | 长度 | 可否为空 | 说明 |
---|---|---|---|---|
ID | varchar | 10 | NOT NULL | 编号(主键) |
Name | varchar | 20 | NOT NULL | 处罚结果名称 |
Explain | varchar | 50 | NULL | 说明 |
车辆类型信息表(CarCardBar)
表5.7
列名 | 数据类型 | 长度 | 可否为空 | 说明 |
---|---|---|---|---|
CarCardID | varchar | 10 | NOT NULL | 编号(主键) |
CarCardName | varchar | 20 | NOT NULL | 名称 |
CarCardExplain | varchar | 250 | NULL | 说明 |
特殊车辆类型信息表(TCarBar)
表5.8
列名 | 数据类型 | 长度 | 可否为空 | 说明 |
---|---|---|---|---|
TCarID | varchar | 10 | NOT NULL | 编号(主键) |
TcarName | varchar | 40 | NOT NULL | 名称 |
TCarExplain | varchar | 250 | NULL | 说明 |
行政区划信息表(WardBar)
表5.9
列名 | 数据类型 | 长度 | 可否为空 | 说明 |
---|---|---|---|---|
ID | varchar | 10 | NOT NULL | 编号(主键) |
Name | varchar | 50 | NOT NULL | 名称 |
银行名称信息表(BankBar)
表5.10
列名 | 数据类型 | 长度 | 可否为空 | 说明 |
---|---|---|---|---|
BankName | varchar | 30 | NOT NULL | 银行名称(主键) |
行政复议处信息表(WSpaceBar)
表5.11
列名 | 数据类型 | 长度 | 可否为空 | 说明 |
---|---|---|---|---|
WSpaceName | varchar | 50 | NOT NULL | 名称(主键) |
条例信息表(MByelawBar)
表5.12
列名 | 数据类型 | 长度 | 可否为空 | 说明 |
---|---|---|---|---|
MbyelawName | varchar | 50 | NOT NULL | 条例名称(主键) |
号牌种类信息表(SCarBar)
表5.13
列名 | 数据类型 | 长度 | 可否为空 | 说明 |
---|---|---|---|---|
SCarSign | varchar | 10 | NOT NULL | 编号(主键) |
SCarName | varchar | 20 | NOT NULL | 名称 |
SCarExplain | varchar | 250 | NULL | 说明 |
处罚地点信息表(PshAddrBar)
表5.14
列名 | 数据类型 | 长度 | 可否为空 | 说明 |
---|---|---|---|---|
PshAddrID | varchar | 10 | NOT NULL | 编号(主键) |
PshAddrName | varchar | 50 | NOT NULL | 处罚地点 |
PshAddrPart | varchar | 50 | NOT NULL | 落款机关 |
Department | varchar | 50 | NOT NULL | 所属单位 |
本地车辆标识信息表(LocalSignBar)
表5.15
列名 | 数据类型 | 长度 | 可否为空 | 说明 |
---|---|---|---|---|
Front | varchar | 20 | NOT NULL | 前缀(主键) |
Explain | varchar | 100 | NULL | 说明 |
外地车辆标识信息表(WaiDiBar)
表5.16
列名 | 数据类型 | 长度 | 可否为空 | 说明 |
---|---|---|---|---|
BeforePart | varchar | 10 | NOT NULL | 前缀(主键) |
Explain | varchar | 100 | NULL | 说明 |
违章信息表(WZXinXiBar)
表5.17
列名 | 数据类型 | 长度 | 可否为空 | 说明 |
---|---|---|---|---|
CarID | varchar | 20 | NOT NULL | 车牌号(主键) |
CarTime | Datetime | 8 | NOT NULL | 违章时间(主键) |
CarType | varchar | 20 | NOT NULL | 车辆类型 |
CarAction | varchar | 50 | NOT NULL | 违章行为 |
Addr | varchar | 50 | NOT NULL | 违章地点 |
fangxinag | varchar | 50 | NULL | 方向 |
shudu | Decimal | 9 | NULL | 速度 |
Lshudu | Decimal | 9 | NULL | 限制速度 |
Localtype | varchar | 10 | NOT NULL | 本地车 |
TeshuCar | varchar | 50 | NULL | 特殊车名称 |
state | smallint | 2 | NOT NULL | 信息状态 |
移动电子警察违章图片信息表(QueryRSBar)
表5.18
列名 | 数据类型 | 长度 | 可否为空 | 说明 |
---|---|---|---|---|
Actiontime | Datetime | 8 | NOT NULL | 违章时间(主键) |
CarType | varchar | 20 | NULL | 车辆类型 |
Addr | varchar | 50 | NULL | 违章地点 |
Dir1 | varchar | 50 | NULL | 图片目录1 |
Dir2 | varchar | 50 | NULL | 图片目录2 |
Dir3 | varchar | 50 | NULL | 图片目录3 |
Dir4 | varchar | 50 | NULL | 图片目录4 |
state | Char | 2 | NOT NULL | 信息状态 |
卡口违章图片信息表(PortPicBar)
表5.19
列名 | 数据类型 | 长度 | 可否为空 | 说明 |
---|---|---|---|---|
ActionTime | Datetime | 8 | NOT NULL | 违章时间(主键) |
CarID | varchar | 20 | NULL | 车牌号码 |
CarType | varchar | 20 | NULL | 车辆类型 |
Addr | varchar | 50 | NULL | 违章地点 |
Carshudu | Decimal | 9 | NULL | 速度 |
Dir1 | varchar | 50 | NULL | 图片目录1 |
Dir2 | varchar | 50 | NULL | 图片目录2 |
Dir3 | varchar | 50 | NULL | 图片目录3 |
Dir4 | varchar | 50 | NULL | 图片目录4 |
state | char | 2 | NOT NULL | 信息状态 |
处罚信息表(chufaBar)
表5.20
列名 | 数据类型 | 长度 | 可否为空 | 说明 |
---|---|---|---|---|
ID | varchar | 20 | NOT NULL | 处罚编号(主键) |
WSpace | varchar | 50 | NOT NULL | 行政区划 |
name | varchar | 8 | NULL | 被处罚人姓名 |
Part | varchar | 50 | NULL | 发证机关 |
Addr | varchar | 100 | NULL | 单位或地址 |
SID | varchar | 18 | NULL | 驾驶证或身份证号码 |
CarID | varchar | 20 | NOT NULL | 车牌号码(主键) |
CarTpye | varchar | 50 | NULL | 车辆类型(主键) |
Shijian | varchar | 50 | NOT NULL | 违章时间 |
ActionID | varchar | 10 | NULL | 违章行为编号 |
Fajing | Float | 8 | NULL | 罚款金额 |
Chfaaddr | varchar | 50 | NULL | 处罚地点 |
Person | varchar | 8 | NULL | 执勤民警 |
Chudate | Datetime | 8 | NULL | 处罚日期 |
用户组信息表(UserGroup)
表5.21
列名 | 数据类型 | 长度 | 可否为空 | 说明 |
---|---|---|---|---|
UserGroup | varchar | 50 | NOT NULL | 组名(主键,外键) |
用户组权限信息表(quanxianbar)
表5.22
列名 | 数据类型 | 长度 | 可否为空 | 说明 |
---|---|---|---|---|
UserGroup | varchar | 50 | NOT NULL | 组名(主键,外键) |
quanxian | varchar | 2 | NOT NULL | 小权限(主键) |
5.4 数据库的完整性和安全性
5.4.1 数据库的完整性
数据库的完整性是指数据的正确性和相容性。数据库管理系统(DBMS)用一定的机制来检查数据库中的数据是否满足规定的条件——完整性约束条件,数据的约束条件是语义的体现,将作为模式的一部分存入数据库中。
本系统中定义了表与表之间的联系有助于实现完整性规则,一般在程序中实现具体的完整性控制。
5.4.2 数据库的安全性
数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄漏、更改或破坏。在数据库系统中,大量的数据集中存放,而且为许多用户直接共享,是宝贵的信息资源,系统的安全保护措施就显得更为重要,它保护数据库防止恶意的破坏和非法的存取。
本系统包括数据库的安全和服务器的安全。采用用户权限表示和鉴定的方法实现数据库的安全,此安全管理措施并不在前台开发工具中实现,而是在后台数据库中实现。在登录数据库时,系统让用户表示自己的身份,不同的用户组的用户权限不同,系统进行核实,鉴别此用户是否为合法用户,若是,系统进一步核实用户的相应权限,通常要求用户输入口令,系统和对用户口令以鉴别用户身份及用户权限组。服务器的安全也是通过用户在登录服务器时输入合法的用户名和密码来实现的。这是一种简单可行的方法,实现起来比较方便。没有采用更加复杂的系统安全管理措施是因为本管理系统一般是应用在内部网络中,采用安全管理措施主要是为了防止没有修改权限的用户无意间修改了数据,因此采用用户标识、用户组权限和鉴定的安全管理措施就能够保障数据库的安全性。
6 系统主要功能模块的设计与实现
6.1 系统设计概述
6.1.1 系统设计的原则与内容
系统设计阶段的主要目的是,在系统分析提出的反映用户需求的逻辑方案的基础上,科学合理地将逻辑方案转换成可以实施的物理(技术)方案。即根据系统分析说明书中的系统逻辑模型,综合考虑各种约束,利用一切可用的技术手段和方法,进行各种具体设计,确定新系统的实施方案,解决“系统怎么做”的问题。系统设计阶段的主要任务是:在科学合理的设计系统总体模型的基础上,尽可能提高系统的运行效率、可变性、可靠性、可控性和工作质量。充分利用并合理投入各类可以利用的人、财、物资源,使之获得较高的综合效率。[3]
系统设计包括总体结构设计和具体物理模型设计。总体结构设计主要指在系统分析的基础上,对整个系统的划分、机器设备配置=数据的存储规律以及整个系统实现设计等方面的合理安排。
系统设计的优劣会直接影响到整个系统设计的质量和所获得的经济效益。因此,为了使设计的系统能最大限度地满足用户的需求,在系统设计中应遵循这样一些基本原则:简单性、系统性、灵活性、可靠性和经济性。[7]
6.1.2 系统设计的基本方法
目前常见的系统设计方法主要有Jackson法、Parnas法和结构化设计方法(SD)等。其中,Jackson法是面向数据结构的设计方法,其核心是按输入输出以及内部存储信息的数据进行设计,把数据结构的描述变换为对程序结构的描述;Parnas方法与主张程序结构要充分反映数据结构的Jackson方法完全相反,Parnas方法主张将可能会发生变化的数据结构隐藏在一个模块的内部,使其它模块与这个因素无关,也就是说,在设计模块时,将某个因素屏蔽在某个模块内部,这个因素的不断变化不至于传播到所在模块的边界之外,即以信息屏蔽为原则建立模块结构:SD方法是通过将结构化编程技术(SP)的思想移植到整个程序系统的模块结构设计领域而形成的。SD方法自诞生以来,一直显示其强大的生命力,被计算机界认为是60年代末期软件领域研究的最大成果之一,是目前模块结构设计中历史最久、使用最广的一种方法。
SD方法的主题思想是将一个程序系统设计成由有层次关系的、相对独立的、单一 功能的诸模块组成的结构,即一方面满足模块间联系弱,模块内联系强的要求,另一方面诸模块之间具有简单的层次结构关系。在这种层次型的模块结构中,模块之间的调用关系非常明确与简单,每个模块可以单独地被理解、编写、调试、查错与修改,一个模块的错误不易向其它模块扩散。理论分析与实践经验都证明,这种层次型的模块结构具有较高的正确性、可靠性、可理解性和可维护性,它适用于任何软件系统的模块结构设计。因此,本系统开发设计中选用SD方法进行系统设计。
6.2 系统主要功能模块结构设计
6.2.1 系统主要功能模块结构
智能道路交通信息管理系统的设计方法主要采用结构化系统的设计方法,其主要特点是:模块结构相对独立、功能单一;模块内部联系大;模块之间联系小;采用模块结构图的描述方式。
本系统根据功能结构来划分为多个子系统模块,主要的功能模块有用户管理、权限管理、违章信息录入、违章信息公告、违章处罚、违章信息统计以及系统的设置部分——包括了:支队管理、大队管理、违章行为、违章地点、车辆类型、处罚地点等子模块。接下来分别介绍几个重要的模块的设计。
6.2.2 用户管理子系统
用户管理子系统仅供管理员级的用户使用,它包括增加用户和查询用户信息两个模块:
①增加用户:填写用户信息,设定用户所属的组,添加用户设定密码。
图6.1 用户添加界面
②查询用户信息:此模块主要完成:查询用户信息;删除用户,把选定用从用户列表中删除;修改用户信息,修改选定用户的用户名、密码、权限等。
图6.2 用户查询界面
6.2.3 用户组管理子系统
用户组管理子系统仅供管理员级的用户使用,它包括增加用户组和查询用户信息两个模块:
①增加用户组:填写用户组名称,设定用户组的权限,进行添加。
图6.3 添加用户组界面
②查询用户组信息:此模块主要完成:查询用户组信息;修改用户组的权限信息,但是不提供修改组名以及删除用户组。
图6.4 修改用户组权限界面
6.2.4 违章信息录入子系统
通过查看违章图片,录入车辆违章信息,该子系统主要包括移动电子警察违章信息录入和卡口违章信息录入两个模块:
①移动电子警察违章信息录入:检索未填写违章信息的移动电子警察数据记录,通过仔细查看车辆的违章图片,核实车辆的违章信息,详细填写车辆的违章信息——包括车牌号码、违章行为、地点时间等,然后保存填写的数据,同时它更新移动电子警察数据记录中的状态字段,使其从未处理变为已处理。当然,如果根据图片判定车辆没有违章就可以删除移动电子警察数据记录中的相应的行。但是他并不删除系统中的图片。
图6.5
移动电子警察违章信息录入界面
②卡口违章信息录入:检索未填写违章信息的移动电子警察数据记录,通过仔细查看车辆的违章图片,核实车辆的违章信息,详细填写车辆的违章信息——包括车牌号码、违章行为、地点时间等,然后保存填写的数据,同时它更新移动电子警察数据记录中的状态字段,使其从未处理变为已处理。当然,如果根据图片判定车辆没有违章就可以删除移动电子警察数据记录中的相应的行。但是他并不删除系统中的图片。
图6.6 卡口违章信息录入界面
6.2.5 违章信息公告子系统
对违章信息进行公告,选定要公告的违章信息的时间段,可以查看到将要公告的数据有那些,进行公告后,数据库中违章信息的状态从未公告变为已公告,这样就可以在公告信息的页面中显示出处于已公告状态的所有数据了。
图6.7 章信息公告界面
6.2.6 违章处罚子系统
此子系统主要功能模块为:通过查看未处罚的违章数据,人工的录入处罚决定书的各个输入项,保证输入正确后,完成输入、这样就可以打印出处罚决定书了,同时也保存处罚信息的数据。
图6.8 章处罚界面
6.2.7 信息统计子系统
此子系统是本系统的信息统计部分,它完成几个简单的统计。具体包括四个小模块:
①违章行为统计:统计不同的违章行为,在不同的时间段内的违章车辆数,并且可以打印报表。
图6.9 章行为统计界面
②违章地点统计:统计不同的违章地点,在不同的时间段内的违章车辆数,并且可以打印报表。
图6.10 章地点统计界面
③
已处罚车辆一览表:统计在不同的时间段内的所有已经处罚的违章车辆的违章处罚信息,并且可以打印报表。其用户界面如下:
图6.11 处罚车辆统计界面
④未处罚车辆一览表:统计在不同的时间段内的所有未经处罚的违章车辆的信息,并且可以打印报表。
图6.12 处罚车辆统计界面
6.3系统重要的程序实现简介
6.3.1 数据库的连接实现
本系统的数据库连接是通过JDBC-ODBC桥接器来连接的,其步骤如下:
①建立ODBC数据源,在管理工具下选择ODBC数据源,按向导一步一步地建立与确定数据库的连接。
②编写建立数据库连接的类,在编写时,考虑了系统的设计状况,用一个静态的方法来建立连接。
③在要用到数据库连接时,调用数据库连接类的连接方法来建立连接,用以实现数据库的操作。
以下是数据库连接类的具体实现:
package com.db;
import java.sql.*;
public class DBConection {
public static Connection getConnect()
{
Connection con = null;
String classforname = "sun.jdbc.odbc.JdbcOdbcDriver";
String constr = "jdbc:odbc:lixjiang";
try
{
Class.forName(classforname);
con = DriverManager.getConnection(constr);
}
catch(Exception e)
{
e.printStackTrace();
}
return con;
}
}
6.3.2 违章图片存储方式
在本系统中,由于牵涉到大量的图片的存储、传输、查看等问题。因为,图片的自身占用空间比较大(一般大于1MB每张),同时图片的数量很大,且会不断增长,而且又经常要查看和维护,就决定了图片不能直接保存在数据库中。因此图片保存在应用服务器的目录下面,而在数据库中保存图片的路径,应此在要查看图片是通过应用服务器和WEB应用中的图片资源地址来查看图片,这样图片的传输等都是由应用服务器来管理和完成。
7 系统测试
7.1 软件测试的目的和原则
在开发大型软件系统的过程中,需要面对错综复杂的问题,因此,在软件生存周期的每个阶段都不可避免地会产生错误。我们力求在每个阶段结束之前通过严格的技术审查,尽可能早的发现并纠正错误。测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件中的错误。目前软件测试仍然是保证软件质量的关键步骤,它是对软件规格说明、设计和编码的最后复审。
尽管面向对象技术的基本思想保证了软件应该有更高的质量,但无论采用什么样的编程技术,编程人员的错误都是不可避免的,而且由于面向对象技术开发的软件代码重用率高,更需要严格测试,避免错误的繁衍。因此,软件测试在面向对象编程里更具有它的重要性。
与开发过程类似,测试过程也必须分步骤进行,每个步骤在逻辑上是前一个步骤地继续。大型软件系统通常由若干个子系统组成,每个子系统又由许多模块组成。因此,大型软件系统的测试的基本层次如图6-1所示。
图7.1 试的基本层次
①单元测试:单元测试的用例从单元详细设计中导出。在单元测试中可以采用功能性测试和结构性测试两种。
②集成测试:在这个测试步骤中所发现的往往是概要设计的错误。
③系统测试:在这个测试步骤中所发现的往往是需求规格说明的错误。一般来说,系统测试是功能性测试,不是结构性测试。
7.2 系统测试
在智能道路交通信息管理系统的开发过程中,每开发完一个模块都会进行模块功能测试,并且在系统最后完成和整合后,还进行了集成和系统测试。
在测试的过程中,主要问题有以下几个:
7.2.1 JSP的中文乱码问题
问题描述及解决办法:显示信息时出现了中文文字显示的问题。Java语言默认的编码方式是Unicode,而我们通常使用的文件和数据库都是基于GB2312或者BIG5等方式编码的,在程序中经常会碰到汉字的处理及显示的问题。
中文作为参数传递出现了乱码的问题。原因是客户提交的中文信息经浏览器编码到达服务器后,或从数据库中读出数据时都会出现中文乱码,JSP无法将其正确解码。而事实上浏览器缺省的编码方式为ISO-8859-1,所以我们在处理中文参数时,把客户提交的中文参数先转换后再应用。通过在每个单独的页面都加上以下的代码:
<%
Request.setCharacterEncoding(“gb2312”);
%>
就实现了中文乱码的解决。
7.2.2 表单和表格打印问题
问题描述:系统中要求打印处罚决定书,以及一些统计结果的表格打印功能。
解决办法:①用Word新建一个文档,保存为WEB页面,再在要求打印变量的地方用变量替换原有的文本,保存为JSP页面,利用浏览器的打印就可以打印出处罚决定书的Word版本。
②利用网上下载的webprint试用版,实现了表格的打印功能。在此,对发行webprint的公司以及网站表示感谢。
7.2.3 数据库时间字段以及页面中的时间显示问题
问题描述:本系统中对时间的要求比较严格,违章的时间要求精确到秒,这就决定了我在设计数据库是用datetime作为字段类型的想法和实现。然而,由于页面的时间是以字符串的形式传递的,就要求类型转换。
解决办法:在JavaBean中使用SimpleDateFormat对象来进行时间和字符串之间的转换,实现前后两端不同类型数据的类型转换,具体代码如下:
public void setShijian(String Shijian)
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
this.shijian = sdf.parse(Shijian);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String getShijian()
{
String result;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
result = sdf.format(this.shijian);
return result;
}
这样就能实现从字符串到时间时间到字符串的转换了。
7.3 软件运行与安装
7.3.1 J2EE应用程序的构建与部署
在J2EE框架下,EJB主要实现的是企业的业务逻辑。这些业务逻辑可以分布式地物理存在于不同的应用服务器上。在实现商务逻辑时,我们要在客户端通过应用服务器来调用这些业务逻辑。要调用业务逻辑,我们必须先将实现业务逻辑的EJB部署到应用服务器中以便调用。在不同的应用服务器上部署同一EJB组件时,其部署过程有一些细微差别。这些应用服务器包括BEA 的WebLogic、IBM的WebSphere、Tomcat和源代码开放组织的JBoss应用服务器。本次开发用的服务器是Tomcat 4.1。
7.3.2 具体运行过程
把EPOLICE目录以及目录下的所有文件拷贝到Tomcat的webapps目录下面,启动Tomcat应用服务器后,打开Internet Explorer,在URL地址中输入http://localhost:8080/login1.jsp,即可运行所写的JSP登录页,就可以运行智能道路交通信息管理系统了。
8 结论
此次毕业设计,从系统的需求分析,到总体功能模块的设计、程序具体实现,及最终的整个完整的系统实现和实施,每一个开发环节,都倾注了很多的心血和汗水。在这次的设计里,以前学到的知识都派得上用场,并在实际操作中得到了更多的启发,这正是一个温故而知新的过程。在这次毕业设计的过程中我从一个JSP的门外汉开始,慢慢地学习JSP的知识并不断的进行运用,并且随着系统模块一个一个地渐渐完成我对JSP的学习也就更加深入,并且伴随着系统的开发,我不停地学习JSP更加深入的知识,本来更好的知识和技术应该拿来改良系统的设计和实现,然而,当我想更改设计模式时却发现,在系统大半完工的那时,重新进行设计几乎已经是不可能的了,因此,我只好放弃了用新的设计思想来重建的想法。这样我毕业设计的智能道路交通信息管理系统就只是一个用JSP+JavaBean模式设计的WEB应用,该系统具有如下特点:
①采用Browser/Server三层体系结构,使系统具有很好的可维护性和可重用性。
②在本系统的开发过程中采用的是JSP+JavaBean模式,此模式将明显的把显示和逻辑分离,使代码容易管理,适合于中小型项目的开发。
③中间层使用数据库连接池技术加快与数据库服务器之间的数据处理速度,也加快对客户机层的响应速度。
④Web服务器采用的是开源的Tomcat应用服务器,它是一个比较完善的、开放的Web应用服务器。它严格地遵循普遍流行的开放标准,在开发过程中较为适用。
⑤后台数据库采用的SQL Server2000,它功能比较强大,包括了数据复制、数据库系统管理、Internet网关支持、在线分析处理、多媒体支持和各种并行处理能力。
但是,因为本系统比较大,并且在本项目设计阶段,我在Java和Web应用程序设计方面不太熟悉,同时由于毕业设计的时间有限,许多方面在下一步的工作中还需要进一步改进和完善。主要针对以下几方面:
①在设计模式上,应尽量采用满足MVC模式的要求来开发,分离表示层和事物层,使系统具有高的可重用性和适应性以及良好的可维护性。
②系统的某些设计的可扩展性并不十分理想,在以后的系统维护过程中,使用重构方法对系统进行重构,使系统的设计日益趋于更强的可扩展性。
③多开发和使用JSP标签,它可以非常紧密地和JSP的表示逻辑联系在一起,同时又具有和普通JavaBean相同的业务逻辑处理,采用标签库将会提高系统的开发速度。
④在开发中应该用Hibernate、Spring等来实现持久层,同时实现连接池技术,因为这样就能使数据库的连接等到尽可能的减少,有利于数据库效率的提高,以及整个系统效率的提高。
9 致谢
本次毕业设计是在石锐老师的精心指导下完成的,导师她严谨的治学态度以及渊博的知识,时时刻刻的深深地影响着我。无论在理论上,还是在技术上,她都给予我很大的帮助与信心,使我的设计逐步地趋于完善,最终形成一个功能基本齐全的系统。在论文的写作和修改过程中,石锐老师也给予了我莫大的帮助和支持。在此,向石老师表示我最诚挚的谢意。
参考文献
[1] Wang Qianping, Guo Yuchai, Lin Zongkai. A Design Method and Application of Logical Hierarchical Connection Engineering Database. 1999
[2]Kenneth C.Laudon. Management Information System--Organization and Technology of Networked Enterprises. Beijing Higher Education Press. 2001
[3] Chen Yu. Software Development Tools. Economic Science Press. 2000
[4] Zhang Jiwen. Information System Development Cases (First Series). Tsinghua University Press. 1999
[5] Wang Shan, Chen Hong. Database System Principles Tutorial. Tsinghua University Press. 1998
[6] Yang Yiping. Integration of Modern Software Engineering Technology and CMM. People's Posts and Telecommunications Press. 2002
[7] Wang Qing, Li Huaizhang. Software Quality Management: Standards, Technology and Practice. China Planning Publishing House. 2002
[8] Meng Guangjun, Shen Ying, Guo Zhiming, Huo Guoqing. Introduction to Information Resource Management. Tsinghua University Press. 1998
[9] CJDate. Translated by Meng Xiaofeng, Wang Shan, etc. Introduction to Database System. Mechanical Industry Press. 2000
[10] Du Yungui. Dreamweaver UltrDev 4. Tsinghua University Press. 2001
[11] Mary Pyefinch. Translated by Hope Book Creation Office. SQL database development from entry to mastery. Beijing Hope Electronic Publishing House. 2000
[12] Cbuck Musciano, Bill Kennedy. Translated by Technical Bridge. Authoritative Guide to HTML and XTHML. Tsinghua University Press. 2004
[13] Bruce Eckel. Translated by Chen Haopeng, Rao Ruonan, etc. Java Programming Thoughts. Mechanical Industry Press. 2005
[14] Edited by Deng Ziyun and Zhang Ci. JSP network programming. Electronic Industry Press. 2005
[15] Geng Xiangyi. JSP basic course. Tsinghua University Press, 2004