数据库实验八-数据库编程

上传人:第*** 文档编号:34267468 上传时间:2018-02-22 格式:DOC 页数:11 大小:178.50KB
返回 下载 相关 举报
数据库实验八-数据库编程_第1页
第1页 / 共11页
数据库实验八-数据库编程_第2页
第2页 / 共11页
数据库实验八-数据库编程_第3页
第3页 / 共11页
数据库实验八-数据库编程_第4页
第4页 / 共11页
数据库实验八-数据库编程_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《数据库实验八-数据库编程》由会员分享,可在线阅读,更多相关《数据库实验八-数据库编程(11页珍藏版)》请在金锄头文库上搜索。

1、河南工业大学实验报告课程数据库系统原理及应用 实验名称 实验八、简单数据库应用系统开发院 系 信息科学与工程学院 指导老师: 孙宜贵 日 期 2016.11.28专业班级 计科 F1401 姓 名 郑旺旺 学 号 201416010102 一.实验目的1、 理解数据库驱动的应用系统的工作原理,熟悉数据库应用系统的基本开发流程;2、 采用自己熟悉的开发平台(如 Java)、编程语言(如 Java)和数据库访问技术(如 JDBC),结合 SQL SERVER 数据库实现一个典型的基于数据库的应用程序(Web 应用程序、桌面应用、移动应用等均可),深刻理解数据库在系统中的地位,培养系统思维。二.实验

2、要求1. 在数据库设计和数据库编程实验的基础上,实现目标系统业务需求所规定的主要内容,构建一个可运行的数据库应用系统,并整理相应文档,提交实验报告。2. 最低要求:在应用程序的相应模块中通过 JDBC 调用数据库编程实验内容14 中实现的存储过程;3. 扩展要求:个人在数据库编程实验内容 5 中列出的其他各项数据库访问操作(数据添加、修改、删除、查看或统计)的数据库代码必须封装为存储过程,然后在应用程序中通过 JDBC 调用存储过程。4. 说明:不得采用 Hibernate 等 ORM 组件;对于应用程序的外观设计和其他框架组件(如 Struts、Spring、Swing 等)不做限制;有明显

3、抄袭痕迹、雷同者本次成绩作废。三.实验内容内容提纲:1)整体实现思想、方案等描述;2)模块(或子系统)设计与实现(各个模块要分开按序填写!)(主要包括运行界面截图、对应存储过程脚本、调用代码、界面逻辑处理代码等体现个人工作的内容。)说明:截图精简、注释适当,尽量去除无关代码;对应用程序设计方案的图形化表示不做要求,如果绘图请采用一致的方法。四.实验过程及结果1) 系统实现思想及方案本系统采用 JDBC 链接数据库,通过 JDBC 调用数据库中已经实现的存储过程,实现增,删,改,查及其他操作。系统分为六个模块,分别调用相应的存储过程实现相应的功能。主要实现方案如下:用户通过 JSP 和与系统交互

4、,Servlet 得到用户的请求,调用 Service 中的方法,Dao 层根据 service 层的需求来调用相应的存储过程,并把存储过程中数据中执行的结果存储到集合中在逐层传递给用户。其中,DAO 层中使用 c3p0 连接池来统一管理连接,这样做的好处是不用每次操作数据库都需要创建连接,而是使用连接池提供的连接,使用之后再重新归还给连接池,这样达到了连接复用的效果,提升了软件的性能。2) 模块设计与实现系统主界面:子模块 1:调用存储过程增加单条记录运行截图:存储过程脚本:create procedure InsertOneRecordID int,FirstName varchar(20

5、),LastName varchar(20),Phone varchar(11),Email varchar(20)asinsert into Customervalues(id,FirstName,LastName,Phone,Email)go调用代码:public static void executeAdd(Customer c) throws SQLException QueryRunner qr = new TxQueryRunner();String sql = call InsertOneRecord(?,?,?,?,?);Object params = c.getID(),c.

6、getFirstName(),c.getLastName(),c.getPhone(),c.getEmail()qr.update(sql, params);子模块 2:调用存储过程修改单条记录运行截图:存储过程脚本:create procedure UpdateOneRecordID int,FirstName varchar(20),LastName varchar(20),Phone varchar(11),Email varchar(20)asupdate CustomersetFirstName = FirstName,LastName = LastName,Phone = Phon

7、e,Email = Emailwhere CustomerID = idgo调用代码:public static void executeUpdate(Customer c) throws SQLException QueryRunner qr = new TxQueryRunner();String sql = call UpdateOneRecord(?,?,?,?,?);Object params = c.getID(), c.getFirstName(), c.getLastName(), c.getPhone(), c.getEmail()qr.update(sql, params)

8、;子模块 3:调用存储过程删除单条记录运行截图:存储过程脚本:create procedure DeleteOneRecordID intasdelete Customer where CustomerID = IDgo调用代码:public static void executeDelete(int ID) throws SQLException QueryRunner qr = new TxQueryRunner();String sql = call DeleteOneRecord(?);qr.update(sql, ID);子模块 4:调用存储过程查看顾客运行截图:存储过程脚本:cre

9、ate procedure ShowRecordasselect * from Customer;go调用代码:public static List executeShow() throws SQLExceptionQueryRunner qr = new TxQueryRunner();String sql = call ShowRecord;List allList = qr.query(sql, new BeanListHandler(Customer.class);return allList;子模块 5:调用存储过程查询在指定时间段内销售订单统计数据运行截图:存储过程脚本:creat

10、e procedure QueryDatasdate date,edate dateasselect C.CustomerID,N.全名,Phone,T.订单个数,T.税后总金额from Customer C,(select CustomerID,count(SaleID) as 订单个数,sum(Price*(1-Tax) as 税后总金额from Saleswhere SaleDate between sdate and edategroup by CustomerID) T,(select dbo.GetName(CustomerID) as 全名 , CustomerIDfrom Cu

11、stomer) N -调用函数生成含有全名的临时表where C.CustomerID = T.CustomerID and T.CustomerID = N.CustomerIDorder by T.订单个数 desc ,N.全名 ascgo调用代码:public static List executeSalesData(String sdate,String edate) throws SQLException, ParseException QueryRunner qr = new TxQueryRunner();String sql = call QueryData(?,?);java

12、.util.Date sddate = new SimpleDateFormat(yyyy/MM/dd).parse(sdate); java.sql.Date sqlsDate = new java.sql.Date(sddate.getTime(); java.util.Date eddate = new SimpleDateFormat(yyyy/MM/dd).parse(edate); java.sql.Date sqleDate = new java.sql.Date(sddate.getTime();params = sqlsDate, sqleDateList allList =

13、 qr.query(sql, new BeanListHandler(SalesOrder.class),params);return allList;子模块 6:调用存储过程将指定日期之前进的货进行按指定折扣打折处理运行截图:存储过程脚本:create procedure DiscountDate dateasselect P.ProductID,PName,P.Price as 原价,D.折后价,PurchaseDatefrom Product P,(select ProductID,Price*0.7 as 折后价from Productwhere PurchaseDate execut

14、eDiscount(String date) throws SQLException, ParseException QueryRunner qr = new TxQueryRunner();String sql = call Discount(?);java.util.Date udate = new SimpleDateFormat(yyyy/MM/dd).parse(date); java.sql.Date sqlDate = new java.sql.Date(udate.getTime(); Object param = sqlDate;return qr.query(sql, ne

15、w BeanHandler(Product.class),param);五.实验中的问题及心得这次实验是对上次实验的代码化,使用 jdbc 来调用数据库的存储过程。实验中运用了连接池来管理连接,达到连接的复用性,提高了软件的性能。在学习存储过程之前我只会对数据库进行最基本的增、删、改、查操作,一些业务完全是依靠于数据库的基本操作来完成的,学习过存储过程和自定义函数之后,发现业务可以放在数据库中来实现,这样做的好处就是减少对数据库的访问次数,从而达到代码的优化。在实验的过程中使用了 commons 组件中的 dbutils,但是调用存储过程在Java 中使用的是 CallableStatement 接口,而 QueryRunner 类中使用的是PrepareStatement 接口,这样做会不会出现问题呢?于是我就查看了 JavaSE的帮助文档,发现 CallableStatement 是 PrepareStatement 的子接口,但是CallableStatement 接口中并没有 execute()方法和 executeQuery()方法,也就是说这两个方法是父接口的,而且里面的设置参数的方法也是父接口的,这样的话基本上可以用父接口 PrepareStatement 替代了。所以 QueryRunner

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号