分类:
2008-05-15 20:35:52
事务处理保证所有的事务都作为一个工作单元来执行,即使出现了硬件故障或系统失灵,都不能改变这种执行方式.当在一个事务中执行多个操作时,要么所有的操作都被提交(commit),要么整个事务回滚(rollback)到最初状态. 当一个连接被创建时,默认情况下是设置为自动提交事务,这意味着每次执行一个SQL语句时,如果执行成功,就会向数据库自动提交,也就不能回滚了.为了将所个SQL语句作为一个事务执行,可以调用Connection对象的setAutoCommit()方法,传入false来取消自动提交事务,然后在所有的SQL语句成功执行后,调用Connection对象的commit()方法提交事务,或者在执行出错时,调用Connection对象的rollback()方法来回滚事务 下面这个例子中,用户选定购买的图书和数量后,提交订单,程序把更新bookinfo表中的图书数量的操作和更新account表中的余额的操作作为一个事务处理,只有在两个操作都完成的情况下,才提交事务,否则,回滚事务. 1, 编写buy.html文件
2, 编写TradeServlet: TradeServlet负责完成用户购买图书的交易操作
3,部署Servlet:
4,运行GetDBInfoServlet 1,启动Tomact服务器,在浏览器中打开: 2,购买之前,我们先查看用户”彭磊”的帐户余额和《MySQL数据库编程》的库存量: mysql> select * from account; +--------+---------+ | userid | balance | +--------+---------+ | 彭磊 | 588.00 | | 徐璐 | 1000.50 | +--------+---------+ mysql> select * from bookinfo; +----+------------------+--------+----------------+--------------+-------+--------+------ | id | title | author | bookconcern | publish_date | price | amount | remark | +----+------------------+--------+----------------+--------------+-------+--------+------ | 1 | JAVA从入门到精通 | 孙卫琴 | 电子工业出版社 | 2004-06-01 | 34.00 | 35 | NULL | | 2 | JSP应用开发详解 | 刘小华 | 清华大学出版社 | 2005-10-03 | 56.00 | 20 | NULL | | 3 | MySQL数据库编程 | 孙鑫 | 人民邮电出版社 | 2006-06-29 | 78.00 | 56 | NULL | | 4 | JAVA 国际认证 | SCJP | 清华大学出版社 | 2005-02-03 | 46.00 | 55 | NULL | | 5 | JAVA编程思想 | Sun | 电子工业出版社 | 2004-11-16 | 56.00 | 55 | NULL | +----+------------------+--------+----------------+--------------+-------+--------+------ 3,输入用户名”彭磊”,购买数量”4”后,点”购买”, 页面显示: 交易成功 4,此时,再次查看用户”彭磊”的帐户余额和《MySQL数据库编程》的库存量: mysql> select * from account; +--------+---------+ | userid | balance | +--------+---------+ | 彭磊 | 276.00 | | 徐璐 | 1000.50 | +--------+---------+ mysql> select * from bookinfo; +----+------------------+--------+----------------+--------------+-------+--------+------ | id | title | author | bookconcern | publish_date | price | amount | remark | +----+------------------+--------+----------------+--------------+-------+--------+------ | 1 | JAVA从入门到精通 | 孙卫琴 | 电子工业出版社 | 2004-06-01 | 34.00 | 35 | NULL | | 2 | JSP应用开发详解 | 刘小华 | 清华大学出版社 | 2005-10-03 | 56.00 | 20 | NULL | | 3 | MySQL数据库编程 | 孙鑫 | 人民邮电出版社 | 2006-06-29 | 78.00 | 52 | NULL | | 4 | JAVA 国际认证 | SCJP | 清华大学出版社 | 2005-02-03 | 46.00 | 55 | NULL | | 5 | JAVA编程思想 | Sun | 电子工业出版社 | 2004-11-16 | 56.00 | 55 | NULL | +----+------------------+--------+----------------+--------------+-------+--------+------ 余额为276.00(购买前的余额588-图书价格78*购买数量4=276.00), 库存量为52(购买前库存量56-购买数量4=52),说明图书购买后,更新数据库成功! 5,异常测试: 1, 输入用户名”彭磊”,购买数量”412”后,点”购买”, 页面输出: 您所购买的图书库存量不足 2, 仅仅输入用户名”彭磊”, 点”购买”, 页面输出: Error: 请输入用户名和购买数量! 3, 输入用户名”彭磊”, 购买数量”52”后,点”购买”, 页面输出:您的余额不足 |