JSP

网页应用程序开发

JSP教学08 数据库高级功能

教学目的:了解如何在JSP中使用数据库系统的高级功能,例如预存过程、事务处理和图片字段等。

8.1 使用预存过程

预存过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定预存过程的名字并给出参数(如果预存过程带有参数)来执行它。使用预存过程可以减少网络通信量、提高执行速度并增强安全性。

(注意:Access数据库中也有类似预存过程的“查询”,但功能有限,不支持多条SQL语句,也不能使用逻辑语句)

预存过程的编写请参看相关的数据库学习资料,这里只介绍预存过程的使用(以SQL Server的示例数据库Northwind为例)。

执行“产品价格排行榜”预存过程Ten Most Expensive Products,返回最贵的十种产品(产品名、单价):

EXEC [dbo].[Ten Most Expensive Products]

执行“客户订单详情”预存过程CustOrdersDetail(需要传入订单号参数)即可查询产品表和订单详情表,返回指定的客户订单详情(产品名、单价、数量、折扣、合计金额):

EXEC [dbo].[CustOrdersDetail] 10250

在JSP中执行预存过程的基本方法和执行普通的SQL语句一样,使用Statement对象的excecuteQuery方法即可:

String proc = "EXEC [dbo].[CustOrdersDetail] 10250";
Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery(proc);

自动化的方式则是在DW的绑定面板中点击添加按钮选择“可调用(预存过程)”,在弹出对话框中选择预存过程、输入变量默认值和运行时值,并设置返回记录集即可。

(注意:如果DW绑定面板中添加带空格的过程名则会出现错误,请避免在过程名中使用空格)


8.2 实现事务处理

事务(Transaction)是由多个数据操作组成的一个处理单元,组成事务的操作必须全部都成功执行,如果其中一个操作失败,则系统将撤销所有其他操作,恢复本次事务处理之前的状态。事务是保证数据完整性与一致性的重要机制。

JDBC实现事务处理的机制如下:

1)连接对象创建后调用setAutoCommit(false)方法关闭自动提交模式
2)连接对象调用createStatement方法创建语句对象
3)语句对象执行各项数据操作
4)连接对象调用commit方法让所有操作生效
5)任何一项数据操作抛出异常时,连接对象调用rollback方法回滚到初始状态

例如以下“职位调整”事务由雇员1晋级雇员2降级两个操作组成:

try {
	conn.setAutoCommit(false); //不自动提交操作
	String sql1 = "UPDATE Employees SET Title='销售副总裁' WHERE EmployeeID=1";
	String sql2 = "UPDATE Employees SET Title='销售代表' WHERE EmployeeID=2";
	Statement stmt=conn.createStatement();
	stmt.executeUpdate(sql1);
	stmt.executeUpdate(sql2);
	conn.commit(); //统一提交。
	out.print("职位调整已完成!");
}
catch (SQLException e){
	conn.rollback(); //任何一项操作失败则撤消所有操作
	out.print("职位调整未完成!");
}

8.3 读写图片字段

许多Web应用都需要将图片信息存入数据库,此功能可通过两种方式实现:一是上传图片到服务器目录后在数据库中保存图片文件名;二是将上传图片内容直接存入数据库,前者实现起来较复杂但能够节省资源,后者实现起来更容易但十分消耗资源(数据库存储空间的成本远高于普通存储空间,数据库尺寸成倍增大也会影响运行效率),在实际开发中可以根据具体情况进行选择。保存图片文件名可使用普通文本型字段,保存图片内容要使用字节型的图片字段。

例:上传雇员照片到示例数据库并在页面中显示


评论:

发表评论:
该文章禁用评论功能。