资源描述
数据库系统原理
课程设计报告
题 目:
学 院:
专 业:
学生姓名:
学 号:
指导教师:
年 月 日
摘 要
如今的图书馆早已不像以前通过手工记录来登记图书、读者以及借阅信息了,互联网的飞速发展实现了图书管理的信息化。
在本文的开始部分介绍了图书管理信息系统的设计背景,然后阐述了图书信息管理系统的需求和总体设计方案,较具体的论述了系统的详细设计和实现过程。
该系统是在Win7系统下,以关系型数据库MySql为数据库开发管理软件,Java编程技术开发的图书管理信息系统。
该系统主要包括基础维护模块、借阅模块、查询管理模块、统计模块等其他功能模块。用户界面设计方面所利用的是Java编程技术。后台数据库选用的则是MySql关系型数据库。
关键词:图书管理;Java;数据库
目 录
引言 1
1 程序开发的技术基础 2
1.1 Java技术 2
1.2 数据库原理 3
2 图书管理信息系统需求分析 4
2.1 系统目标 4
2.2 需求概述 4
2.3 系统功能分析 4
2.4 系统的需求分析 5
2.4.1设计分析 5
2.4.2数据库需求分析 5
3 图书管理系统的设计 6
3.1 系统功能模块设计 6
3.1.1系统功能模块设计 6
3.1.2系统功能模块结构图 6
3.2 系统数据库设计 7
3.2.1数据流图 7
3.2.2数据存储词条描述 9
3.3 用户界面设计 11
3.3.1输入设计 11
3.3.2输出设计 12
4 图书管理信息系统的实现 12
4.1 开发环境的构建 12
4.2 系统工程目录 12
4.3 公共模块 13
4.3.1 db包 13
4.3.2 util包 15
4.4 功能模块的实现 16
4.4.1登录模块相关 16
4.4.2基础维护模块相关 17
4.4.3借阅模块相关 18
4.4.4查询管理模块相关 20
4.4.5统计模块相关 21
4.4.6系统管理模块相关 21
5 结论 23
参考文献 24
第 25 页 共 25页
引言
21世纪后我们进入了一个高速发展的信息化时代,在各行各业中离不开信息处理,这正是计算机网络被广泛应用于管理信息系统的外部原因。计算机的好处在于它能对信息数据进行高速、安全的处理,尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。
图书馆作为一种信息资源的集聚地,图书、用户与借阅资料繁多,包含很多信息数据的管理,图书管理是一项非常重要的内容。随着图书数量的增加。采用传统的手工图书管理方式,管理过程繁琐而复杂,执行效率低,并且容易出错。在这种情况下,就需要开发一套图书管理系统来提高图书管理工作的效率和质量。
1 程序开发的技术基础
1.1 Java技术
Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。它继承了 C++语言面向对象技术的核心。Java舍弃了C语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
Java不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的性能。
Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是Java企业应用编程接口(Java Enterprise APIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。
1.2 数据库原理
数据库是数据管理的一个领域,是计算机科学技术的一个重要子科学。如今信息资源已成为各个部门、组织的一笔财富。建立一个满足各级部门信息处理要求的行之有效的信息系统就成为了一个企业、事业单位、政府部门或其他社会组织生存和发展的重要条件。因此,作为信息系统核心和基础的数据库得到了越来越深远的运用。
MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。由于其社区版的性能卓越,搭配各种编程语言可组成良好的开发环境。
2 图书管理信息系统需求分析
2.1 系统目标
图书管理信息系统是典型的信息管理系统,其开发主要包括后台数据库的建立以及前端应用程序的开发两个方面。对于前者要求建立数据一致性与完整性强,数据安全性好的库。对于后者则要求应用程序功能完备,容易使用等特点。
系统开发的总体目标就是实现各种信息的系统化、规范化和自动化。
2.2 需求概述
在图书管理系统中,管理员为每个读者建立一个账户,账户内存储读者个人的详细信息,并依据读者类别的不同给每个读者发放借书卡(提供借书卡号、姓名、读者分类等信息)。读者可以凭借书卡号在图书馆进行图书查询、密码的修改以及个人信息查询等操作,不同类别的读者在借书数量、还书期限上可以有所不同。
借阅图书时,由管理员录入借书卡号,系统首先验证该卡号的有效性,若有效,则显示卡号、姓名、已借数量等信息,实际借书的数量不能超出总借书数量的值。完成借书操作的同时要修改相应图书信息的状态、读者信息中的借书数量、在借阅信息中添加相应的记录。
归还图书时,由管理员录入借书卡号和待归还的图书编号,显示借书卡号、读者姓名、图书编号、图书名称、借书日期、应还日期等信息。完成归还操作的同时,修改相应图书信息的状态、修改读者信息中的已借数量、在借书信息中对相应的借书记录做归还标记。
管理员不定期地对图书信息进行添加、修改和删除等操作。也可以对读者信息进行添加、修改、删除等操作。同时可以对图书以及借阅情况做分类统计。
2.3 系统功能分析
该系统主要具备以下功能:
查询功能:能够列出当前系统图书目录,读者目录以及借阅信息,并能够按照需求对图书与读者进行相应的匹配查询。
增加功能:能够对图书与读者信息进行添加。
修改功能:能够对数据库中已存在的读者与图书信息进行修改,以及对账户的密码进行修改。
删除功能:能够对数据库中已存在的读者与图书信息进行删除。
统计功能:能够对图书与读者信息按需求进行分类统计。
2.4 系统的需求分析
2.4.1设计分析
此管理软件使用Java语言进行开发,可粗略的划分为前台和后台部分。前台部分主要的是人机交互的界面,遵照一定的界面设计一般原则,针对不同的用户给予差别化的用户体验。后台部分主要是底层数据间的相互传递,调用Java中封装好的不同类去实现用户的需求。
2.4.2数据库需求分析
为了对数据进行统一的管理与维护,以确保数据的完整性与安全性,我在这里选择的是一种关系数据库MySql,它的规模较小、体积较小、速度较快而且相对成本低,最主要是MySql提供的功能已经足够满足图书管理系信息系统软件的使用了。
图2-1 ER图
图书的入库需要管理员的登记,登记后的图书才能被读者进行借阅,读者的可借阅数量有限定,并且在借书时自动生成借书与还书时间。管理员也可以对读者进行管理,主要体现在对读者的增加与读者信息的更新与删除上。
整个功能至少需要以下数据项:
图书:图书编号、isbn号、图书名称、图书类型、作者、译者、出版社、出版日期、库存数量、价格、在馆状态
读者:读者帐号、读者姓名、读者类型、性别、可借书数量、借阅时间长度
借还信息:编号、书籍编号、书籍名称、借阅读者帐号、借书日期、还书日期、是否归还
用户:编号、帐户名、密码、是否管理员
3 图书管理系统的设计
3.1 系统功能模块设计
3.1.1系统功能模块设计
通过需要实现的功能情况,把图书管理系统软件分成6个模块来实现
登录模块:这是程序的入口,用来判断登录的是读者还是管理员,以及拒绝非系统用户的登录;
基础维护模块:用来实现管理员对图书以及读者的信息管理。实现图书与读者信息的增删改功能;
借阅模块:管理员可通过借阅模块来实现读者的借还书需求;
查询管理模块:该模块主要用来实现管理员对图书、读者以及借阅情况的查询,还能实现读者对自己信息的查询以及对自己借阅情况的查询;
统计模块:用以实现管理员对图书、读者以及借阅情况的统计分析;
系统管理模块:用户与管理员可通过该模块来实现密码的更新修改。
3.1.2系统功能模块结构图
图3-1 系统功能模块结构图
3.2 系统数据库设计
3.2.1数据流图
(1)0层数据流图
图3-2 0层数据流图
(2)1层数据流图
①读者信息管理
图3-3 1层数据流图(1)
②图书信息管理
图3-4 1层数据流图(2)
③图书借还管理
图3-5 1层数据流图(3)
3.2.2数据存储词条描述
经过认真的系统需求分析后,确定图书管理信息系统需要用到以下4张表:
(1)图书信息表
book(图书信息表)
名称
数据类型
长度
说明
id
int
32
图书编号(主键)
isbn
varchar
50
isbn号
name
varchar
100
图书名称
type
varchar
50
图书类型
author
varchar
50
作者
translator
varchar
50
译者
publisher
varchar
1024
出版社
publish_time
date
出版日期
stock
int
11
库存数量
price
double
价格
is_back
smallint
1
在馆状态
表3-1 图书信息表
(2)读者信息表
reader(读者信息表)
名称
数据类型
长度
说明
id
varchar
50
读者帐号(主键)
name
varchar
50
读者姓名
type
varchar
20
读者类型
sex
char
2
性别
max_num
int
3
可借书数量
days_num
int
11
借阅时间长度
表3-2 读者信息表
(3)借还信息表
borrow(借还信息表)
名称
数据类型
长度
说明
id
int
11
编号(主键)
book_id
varchar
50
书籍编号
bookname
varchar
100
书籍名称
reader_id
varchar
50
借阅读者帐号
borrow_date
date
0
借书日期
back_date
date
0
还书日期
is_back
smallint
1
是否归还
表3-3 借阅信息表
(4)用户信息表
user(用户信息表)
名称
数据类型
长度
说明
id
int
11
编号(主键)
name
varchar
50
帐户名
pass
varchar
50
密码
is_admin
smallint
1
是否管理员
表3-4 用户信息表
3.3 用户界面设计
用户界面主要用于用户与系统之间的交互,一个好的用户界面能使用户用户清晰的明白操作逻辑,省去不必要的繁琐重复操作,让用户以最简单的步骤就能达到需求的实现。
3.3.1输入设计
输入设计是用户与计算机系统管理软件进行传递交换数据信息的重要过程,本系统通过键盘的输入以及鼠标的点击来实现,具备清晰的提示,保证输入数据类型的正确性,让用户能用简单的输入就能达到目的的实现
3.3.2输出设计
图书管理系统用简洁统一的界面风格,让用户在第一时间就能清晰快速的获取相应的信息,同时输出的信息可以复制,以便于用户对获取到的信息进行保存以及与其他软件如Word、Excel等进行配合使用,从而达到更多的功能实现。
4 图书管理信息系统的实现
4.1 开发环境的构建
本系统使用Java数据库编程实现,所包含的数据量并不是很大,根据系统的实际情况,采用如下开发环境。
操作系统: Windows 7;
数据库系统: MySql 5.6.24;
编程语言: JDK 1.8.0;
开发工具: Eclipse Mars Release (4.5.0)。
4.2 系统工程目录
在开发一个实际的应用系统的时候,应该规划好系统工程的文件结构。有规划的工程文件结构便于在开发过程中进行管理,也使得开发工作的内容更加的清晰。在Eclipse开发环境下,本系统工程目录结构如下图所示
图4-1 系统工程目录图
src 目录: 用于存放系统的所有源代码,源代码按照包结构进行组织。
db包: 存放数据库操作类。
entity包: 存放系统的尸体类,包括图书和读者实体类。
util包: 存放系统的使用工具类,为其他包公用。
windows包: 存放系统的图形界面窗口类。
lib目录: 存放系统运行所需的库文件,需要加入到Eclipse 的Build Path中。
4.3 公共模块
系统开发过程中,经常需要设计一些公共模块供系统中其他功能模块共同调用。本系统的公共模块主要由db和util两个包来实现。
4.3.1 db包
db包主要用来存放数据库操作类。系统与数据库的交互最终都是通过调用db包中的相关类来实现。db包的构成如下表所示。
序号
类名
标识
实现功能
1
BaseDao
db.BaseDao
基础数据库操作类
2
BookDao
db.BookDao
图书数据操作类
3
ReaderDao
db.ReaderDao
读者数据操作类
4
BorrowDao
db.BorrowDao
借阅数据操作类
表4-1 db包构成
(1)BaseDao类
BaseDao类用于完成最基本的数据库操作,包括建立数据库连接和执行sql语句等。在该类中构造了连接数据库的方法,该方法可判断数据库是否已经建立了连接。在该类中还定义了两个方法用于根据传入的sql语句,执行数据库的Query或者Update等操作。调用其方法的外部实体不需要关心具体的数据库操作实现,代码如下。
public class BaseDao {
protected static String driver = "com.mysql.jdbc.Driver"; //数据库驱动
protected static String url = "jdbc:mysql://127.0.0.1:3306/tsgl?characterEncoding=utf8"; //连接url
protected static String dbUser = "root"; //数据库用户名
protected static String dbPwd = "1111"; //数据库密码
private static Connection conn = null;
private BaseDao() {
try {
if (conn == null) {
Class.forName(driver); //加载数据库驱动
conn = DriverManager.getConnection(url, dbUser, dbPwd); //建立数据库连接
} else
return;
} catch (Exception ee) {
ee.printStackTrace();
}
}
public static ResultSet executeQuery(String sql) {
try {
if (conn == null)
new BaseDao();
return conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE).executeQuery(sql); //执行数据库查询
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
public static int executeUpdate(String sql) {
try {
if (conn == null)
new BaseDao();
return conn.createStatement().executeUpdate(sql); //执行数据库更新
} catch (SQLException e) {
System.out.println(e.getMessage());
return -1;
} finally {
}
}
(2)BookDao类
该类用于对图书信息数据进行数据库操作,主要包含了获取图书信息单个实体与实体列表的方法。
(3)ReaderDao类
该类用于对读者信息数据进行数据库操作,主要包含了获取读者信息单个实体与实体列表的方法。
(4)BorrowDao类
该类用于对借阅信息数据进行数据库操作,同样是获取借阅信息实体列表的方法。
4.3.2 util包
util 包主要用于存放一些使用工具类。系统所有模块中经常需要使用的一些工具类或者系统常量等在该包中定义,包含一些系统全局变量类与日期工具类。系统经常碰到一些日期数据,为了方便系统需要,该包中定义了各种日期操作的方法,方便对日期型数据操作时直接调用。
4.4 功能模块的实现
4.4.1登录模块相关
登录模块用于实现系统的登录功能,也是进入系统的入口。登录模块主要由window包下的Login类实现。当用户输入完用户名和密码后,单击“确定”按钮。“确定”按钮定义了相应的事件监听器用于响应该动作。其响应事件主要由该类中定义的btn_okActionPerformed()方法来实现。
在连接数据库进行验证之前,判断是否输入了用户名。如果未输入,则系统给出提示,方法终止运行。如果用户名不为空,则程序连接数据库。在user表中查询name值是否等于输入的用户名并且pass值等于输入密码的记录。如果相应记录不存在,系统给出提示,方法再次中断。
如果满足条件的记录存在,则将用户名记录到全局变量的login_user中,进入系统主界面,登录成功。
图4-2 系统登录界面
成功登录系统后即进入系统的主界面,系统会根据登录用户的权限不同展示不同的主界面。一般用户的些许功能模块不能使用。
图4-3 管理员主界面
4.4.2 基础维护模块相关
(1)图书维护
图书维护子模块用于维护图书的相关信息,包括对图书信息的添加、修改和删除。所有的维护操作最终都是落实到数据库中book表的数据库操作。
①添加图书
图书信息的添加功能主要由window包下的BookAdd类来实现。待用户输入完图书信息信息后,单击“保存”按钮,系统触发相应事件来执行添加操作。图书信息自动存入book表中,并进行自动编号。
图4-4 添加图书界面
②图书修改
图书信息的修改功能主要由window包下的BookUpdate类来实现。选择“图书维护”菜单下的“修改”子菜单后弹出图书修改界面。程序首先获取用户输入的图书编号,然后根据编号在数据库中提取图书信息,最后将提取的图书信息显示到图形界面上供用户修改。待用户修改完相应的图书信息后,单击“保存”系统执行图书信息修改的保存操作。关键代码如下所示。
private void btn_saveActionPerformed(ActionEvent e) {
//获取用户输入信息
String id = tf_id.getText();
String name = tf_name.getText();
String type = cb_type.getSelectedItem().toString();
String author = tf_author.getText();
String translator = tf_translator.getText();
String publisher = tf_publisher.getText();
String publish_time = tf_publish_time.getText();
String price = tf_price.getText();
String stock = tf_stock.getText();
String sql = "update book set name='" + name + "',type='" + type
+ "',author='" + author + "',translator='" + translator
+ "',publisher='" + publisher + "',publish_time='"
+ java.sql.Date.valueOf(publish_time) + "',price="
+ Double.parseDouble(price) + ",stock=" + stock + " where id='"
+ id + "'";
//执行数据库操作
int i = BaseDao.executeUpdate(sql);
if(i==1){
JOptionPane.showMessageDialog(null, "修改成功");
dispose();
}
图4-5 图书修改界面
③图书删除
图书信息的删除功能主要由window包下的BookDelete类来实现。删除图书前,首先通过输入待删除的图书编号,获取该编号的图书信息,在确认后通过点击相应的功能按键来实现图书删除功能。关键代码如下所示。
private void btn_delActionPerformed(ActionEvent e) {
String id = tf_id.getText(); //获取图书编号
String sql = "delete from book where id='" + id + "'"; //删除指定编号的图书
//执行数据库操作
int i = BaseDao.executeUpdate(sql);
if(i==1){
JOptionPane.showMessageDialog(null, "删除成功");
dispose();
}
}
(2) 读者维护
读者维护与图书维护的相应功能实现起来类似。主要也是通过window包下的不同类来实现相应的功能。
4.4.3借阅模块相关
借阅模块下包含了借书与还书两个子模块。
数据库中的borrow表负责存储读者借书信息,所以系统最终的实现实际是对borrow表进行数据库操作。程序通过获取用户的输入从reader表与book表中提取相应的信息,再经过系统的整合加工将所得数据写入borrow中,并对reader表与book表进行更新。关键代码如下所示。
private void btn_borrowActionPerformed(ActionEvent e) {
String book_id = tf_book_id.getText(); //获取图书编号
String reader_id = tf_reader_id.getText(); //获取读者编号
String borrow_date = lb_borrow_date.getText(); //获取借出日期
String back_date = lb_back_date.getText(); //获取还书日期
//判断书籍是否可借
Book book = BookDao.selectBook(book_id);
String bookname = book.getName();
int is_back = book.getIs_back();
if (is_back != 0){
//对读者能否继续借书进行判断
String id = tf_reader_id.getText();
Reader reader = ReaderDao.selectReader(id);
int num = reader.getMax_num();
if (num >0 ){
num=num-1;
//拼sql语句
String sql = "insert into borrow(book_id,reader_id,borrow_date,back_date,is_back,bookname) values('"+ book_id+ "','"+ reader_id+ "','"+ borrow_date+ "','"+ back_date+ "','0','"+ bookname+"')";
//执行数据库操作
int i = BaseDao.executeUpdate(sql);
if(i==1){
JOptionPane.showMessageDialog(null, "借书成功");
String sql0 = "update book set is_back=0 where id= '"+book_id+"'";
BaseDao.executeUpdate(sql0);
String sql2 = "update reader set max_num = '" + num +"' where id = '" + id +"'";
BaseDao.executeUpdate(sql2);
}
}else
JOptionPane.showMessageDialog(null, "该读者所借书籍已达上限!");
}else{
JOptionPane.showMessageDialog(null, "该书已被借走");
}
}
图4-6 借书功能界面
4.4.4查询管理模块相关
该模块下设计了几个模块,用于图书、读者、借阅信息与读者的自查询等几个模块。能用于管理员对相关信息的查询,也使读者能对自己借阅情况与自身信息的查询。
该模块通过在window包下的不同类来实现。查询时可以实现对单一分类进行查询,也能够进行多条件的复合查询。当读者用户登录时,在进行读者信息查询时系统通过调用全局变量的login_user自动对读者进行匹配,可以有效防止其他读者信息的泄露,同时也能方便进行快速准确的信息查询。
图4-7 图书查询界面
4.4.5 统计模块相关
统计模块下设置借阅统计读者统计与图书统计三个子模块。用于管理员对图书信息以及读者借阅等信息的统计。具备分类统计的功能,具体数据与数据总量在用户界面上显示,并且用户可对统计数据进行复制,以便进行备份以及配合其他软件进行数据的再加工。部分关键代码如下所示。
private void btn_cxActionPerformed(ActionEvent e) {
String id = tf_id.getText();
String author = tf_author.getText();
String publisher = tf_publisher.getText();
String type = tf_type.getText();
String sql = "select * from book where name = '" + id + "' or author = '"+author+"'or publisher = '"+publisher+"'or type = '"+type+"'";
Object[][] results = getResult(BookDao.selectBookList(sql));
DefaultTableModel model=new DefaultTableModel();
table.setModel(model);
model.setDataVector(results, heads);
String i = String.valueOf(results.length);
tf_count.setText(i);
}
4.4.6系统管理模块相关
用户登录系统以后,在主界面上选择“系统管理”菜单项后可以使用系统管理模块。系统管理模块主要包括更改密码和退出系统两个子模块。
更改密码子模块用于实现对当前登录用户密码的修改。更改密码功能主要由window包下的UpdatePassword类来实现。
图4-8 修改密码界面
程序首先获取用户两次输入的密码,然后比较两次输入的密码是否一致。如果两次输入密码不一致,则系统给出提示,终止方法执行。
图4-9 密码修改不成功提示
如果两次输入密码一直,则执行数据库操作。更新数据库user表中当前用户的密码为新密码。数据库操作成功,同时给出“密码修改成功”提示。
图4-10 密码修改成功提示
关键代码如下所示。
private void okButtonActionPerformed(ActionEvent e) {
String pass1 = tf_pass1.getText(); //获取第一次输入密码
String pass2 = tf_pass2.getText(); //获取第二次输入密码
//两次输入密码不一致
if (!pass1.equals(pass2)) {
JOptionPane.showMessageDialog(this,"第一次输入的密码和第二此输入的密码不一致,请重新输入!");
tf_pass1.setText("");
tf_pass2.setText("");
return;
}
//执行数据库操作,更改密码
String sql = "update user set pass='" + pass1 + "' where name='" + GlobalVar.login_user + "'";
int i = BaseDao.executeUpdate(sql);
if(i==1){
JOptionPane.showMessageDialog(null, "密码修改成功");
dispose();
}
5 结论
经过大概两周的设计和开发工作,该图书管理信息系统基本完成,实现了小型图书馆日常的基本管理系统。
这次图书管理信息系统的实现也让我学习到了很多,特别是在编程开发,让我对数据库的开发以及Java编程有了很大的进步,明白了一个软件的设计实现远远不是简单的代码堆叠。以前在学习编程语言的时候总感觉编程看起来并不难,但是当把这些离散的功能组件整合在一起,用来实现一个更大更完整的系统时,却发现这其中的难度不是光靠想象就能感觉得到的。当一次次的错误提示抛出,终于明白只是学习到开发语言,在程序员这条路上不过是刚从起跑线出发。
在日后的学习中,我会更加的努力,学以致用,在实践中发现问题解决问题,争取更大的进步。
参考文献
[1] 彭灿华,魏士伟.J2EE项目开发与设计[M].北京:中国铁道出版社,2013:58~66.
[2] 刘升华.零点起飞学Java[M].北京:清华大学出版社,2013:276~303.
[3] 徐宝民.数据库原理与应用[M].北京:人民邮电出版社,2008:170~180.
[4] 刘增杰,,张少军. MYSQL 5.5从零开始学[M].北京:清华大学出版社,2012:241~249.
[5] 刘新,,管磊. Java编程实战宝典[M].北京:清华大学出版社,2014:681~683.
展开阅读全文