JSP---网上商城->手动提交事务,保证数据一致性

 1 public int add(SalesOrder so) {
 2         int orderId = -1;
 3         DB db = new DB();
 4         Connection connection = db.getConn();
 5         boolean autoCommit = true;
 6         try {
 7             autoCommit = connection.getAutoCommit();//将默认的提交方式先记下来,以恢复现场用
 8             connection.setAutoCommit(false);
 9         } catch (SQLException e1) {
10             // TODO Auto-generated catch block
11             e1.printStackTrace();
12         }
13         String sql = "insert into SalesOrder(uid,status) values(?,?)";
14         try {
15             // 订单写入数据库
16             PreparedStatement ps = connection.prepareStatement(sql,
17                     Statement.RETURN_GENERATED_KEYS);//在添加订单的同时,获得该订单的自动生成的id
18             ps.setInt(1, so.getCustomer().getCid());
19             ps.setInt(2, so.getStatus());
20             ps.executeUpdate();
21
22             // 获得自动生成的新订单号
23             ResultSet rsKey = ps.getGeneratedKeys();
24             rsKey.next();
25             orderId = rsKey.getInt(1);
26
27             // 将所有的订单项写入数据库
28             String sqlItem = "insert into salesItem(pid,pcount,oid) values(?,?,?)";
29             PreparedStatement psItem = connection.prepareStatement(sqlItem);
30             List<SalesItem> items = so.getItems();
31             Iterator<SalesItem> it = items.iterator();
32             while (it.hasNext()) {
33                 SalesItem item = it.next();
34                 psItem.setInt(1, item.getItem().getProduct().getPid());
35                 psItem.setInt(2, item.getItem().getCount());
36                 psItem.setInt(3, orderId);
37                 psItem.addBatch();//将每个订单项添加操作加入批处理作业中
38             }
39             psItem.executeBatch();//执行批处理
40             connection.commit();//手动提交数据库
41             ps.close();
42             psItem.close();
43
44         } catch (SQLException e) {
45             try {
46                 connection.rollback();
47             } catch (SQLException e1) {
48                 e1.printStackTrace();
49             }
50             e.printStackTrace();
51         } finally {
52             try {
53                 connection.setAutoCommit(autoCommit);
54                 connection.close();
55                 db.close();
56             } catch (SQLException e) {
57                 e.printStackTrace();
58             }
59         }
60         return orderId;
61     }

这样做的目的就是只有在我们成功添加新订单后,才可以将购物项加入该订单。以保持数据的一致性

ps:

commit的作用:就是把緩沖區的數據提交到數據庫
autocommit=true就是你無須執行commit,程序就自動幫你執行
autocommit=false,直到你commit或disconnect才執行commit

时间: 2024-08-29 18:05:22

JSP---网上商城->手动提交事务,保证数据一致性的相关文章

易购网上商城01

易购商城的第一天 1   安排计划 1.电商行业的背景. 2.易购商城的介绍. 3.工程项目的搭建. 2   电商行业介绍 2.1   电商行业技术特点 技术新 技术范围广 分布式 高并发.集群.负载均衡.高可用 海量数据 业务复杂 系统安全 3   易购商城 3.1   易购商城简介 3.1.1   电商行业的模式: B2B:企业对企业.阿里巴巴 B2C:企业对客户 淘宝,(京东B2B2C) 苏宁易购 C2C:客户对客户 闲鱼 赶集 友邻 O2O:线上对线下 百度外卖.美容到家... 3.1.

【SSH网上商城项目实战27】域名空间的申请和项目的部署及发布

前面陆陆续续的完成了网上商城的一些基本功能,虽然还有很多地方有待完善,但是不影响项目的部署和发布,我们可以先来玩一把,这一节主要介绍下域名空间的申请以及项目的部署和发布流程. 1. 域名空间的申请 作为一个伟大的屌丝,肯定没钱买域名空间,很自然的想到去申请个免费的,现在免费的域名空间也很多,我在福佳jsp技术网上申请了一个试用期是15天的,大家也可以去申请个玩玩,反正作为学习,这已经足够了,当然,如果要长期的肯定要付费的.注册过程我截几个图,如下: 然后下一步,最后开通如下: 建议把上面这些信息

基于SSH框架的网上商城的质量属性

常见质量属性 1.性能 性能就是一个东西有多快,通常指响应时间或延迟. 响应时间:从发出请求到收到响应所用的时间,比如用户点击网页中的超链接或桌面应用程序中的按钮 延迟:消息从A点到B点,通过你的系统所用的时间. 就算构建的不是“高性能”软件系统,性能也可应用于Web应用系统.桌面应用系统.面向服务架构.消息系统等几乎所有你要构建的软件系统. 2.可用性 可用性是软件对服务请求的可操作和可见程度.你常会看到用“9”来衡量或指代可用性,如99.99%(四个9)或99.999%(五个9).这些数字指

开源Asp.Net MVC网上商城BrnShop正式发布,提供源码下载(非官方文章)

BrnShop网上商城是以Asp.Net mvc3为基础开发的网上商城,源代码完全开源(企业版的源代码目前还没有完全整理完成,一旦整理完成也全部开源). 源码下载地址: asp.net(c#)开源商店系统Brn shop 1.9(免费仿京东商城) asp.net(c#)开源商店系统Brn shop 2.1(免费仿京东商城) 项目结构图如下: 后台管理页面: 功能简介: 1 基本数据:品牌,分类,属性(有些属性用作sku,有些属性还要提供商品筛选功能). 2 商品属性:商品图库,商品属性列表,商品

BrnShop开源网上商城第一讲:架构设计

首先在此感谢大家对BrnShop项目的支持和鼓励!我们在发布BrnShop以前曾推测项目会受到不少园友的支持,但没想到园友们的支持大大超过我们的预测.4天6000次浏览,140个推荐,170个评论,8000次下载.看到这些数据后我们内心除了激动外,更多了一份责任.无论将来遇到多大的困难,我们一定要坚持把BrnShop坚持到底!! 如果你还不知道BrnShop是什么或还没有下载源码的可以点此下载,如果下载源码后发现商城有bug,也可以点此下载(什么?你还是1.0.**版本?我们现在都已经更新到1.

重磅来袭,开源Asp.Net MVC网上商城BrnShop正式发布,提供源码下载

BrnShop网上商城是以Asp.Net mvc3为基础开发的网上商城,源代码完全开源(企业版的源代码目前还没有完全整理完成,一旦整理完成也全部开源). 啥话也不说了,直接上源码:下载源码(由于公司服务器在香港,所以如果下载速度过慢可来此下载网盘) 项目结构图如下: 后台管理页面: 一个完整的网上商城应该至少包含以下几个方面: 1 基本数据:品牌,分类,属性(有些属性用作sku,有些属性还要提供商品筛选功能). 2 商品属性:商品图库,商品属性列表,商品关键词列表,商品库存(有的需要按照仓库拆分

【JAVAWEB学习笔记】网上商城实战2:异步加载分类、Redis缓存分类和显示商品

网上商城实战2 今日任务 完成分类模块的功能 完成商品模块的功能 1.1      分类模块的功能: 1.1.1    查询分类的功能: 1.1.2    查询分类的代码实现: 1.1.2.1  创建表: CREATE TABLE `category` ( `cid` varchar(32) NOT NULL, `cname` varchar(20) DEFAULT NULL, PRIMARY KEY (`cid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 1

SSH网上商城---商品详情页的制作

在前面的博文中,小编分别简单的介绍了邮件的发送以及邮件的激活,逛淘宝的小伙伴都有这样的体会,比如在搜索框中输入连衣裙这个商品的时候,会出现多种多样各种款式的连衣裙,连衣裙的信息包括价格,多少人购买,商品的名称等等,但是这些信息不够详情,我们需要了解更多的关于连衣裙的详情,点击某个商品,跳转页面,查看连衣裙的详情,以前小编逛淘宝的时候,从来都没有想过这个功能是如何实现,只知道一个劲儿的在那儿逛,小编现在接手的这个项目中就遇到这样的功能,点击商品跳转到某个商品的详情页面,这个功能该如何实现呢?不要着

【SSH网上商城项目实战16】Hibernate的二级缓存处理首页的热门显示

网上商城首页都有热门商品,那么这些商品的点击率是很高的,当用户点击某个热门商品后需要进入商品的详细信息页面,就像淘宝里面那样.那么每次点击都要去后台查询一下该商品的详细信息,就会发送相应的sql语句,每次刷新一下详细页面也会发sql语句,这样的话,性能肯定会受到很大的影响.那么使用Hibernate的二级缓存就可以解决这个问题. 有些人可能会想,我们可以使用重定向,这样的话,在用户第一次访问的时候把信息查出来放到session中,以后每次用户刷新就可以去session中拿了,这样就不用去数据库中