public String[] deleteEPGroup(String groupID, String groupName) {
String[] operRes=new String[3];
if(!StringUtils.isEmpty(groupID)) {
operRes[0]="3";
operRes[1]="对不起,出现错误,请重试或联系管理员进行处理";
operRes[2]="删除同步通讯录组失败";
Log.getInstance().printError(this.getClass().getName(),"删除同步通讯录组,无法获取要删除的组的GroupID");
return operRes;
}
//组名称的验证处理
if(groupName==null || "".equals(groupName)) {
//如果组名称为空就根据Id数据库中查询
Log.getInstance().printInfo(this.getClass().getName(), "删除同步通讯录组,客户端传递组名称失败,开始从数据库中查询组名称");
List<String[]> groupNameList=this.getGroupByID(groupID);
if(groupNameList==null)
{
operRes[0]="3";
operRes[1]="对不起,出现错误,请重试或联系管理员进行处理";
operRes[2]="删除同步通讯录组失败";
Log.getInstance().printError(this.getClass().getName(),"删除同步通讯录组,根据ID查询组名称,数据库连接为null");
return operRes;
}
String[] groupNames=groupNameList.get(0);
if(groupNames==null || groupNames.length<2) {
operRes[0]="3";
operRes[1]="对不起,出现错误,请重试或联系管理员进行处理";
operRes[2]="删除同步通讯录组失败";
Log.getInstance().printError(this.getClass().getName(),"删除同步通讯录组,根据ID查询组名称查询返回的数组为空或长度小于2");
return operRes;
}
if(groupNames[1]!=null &&"".equals(groupNames[1])) {
groupName=groupNames[1];
} else {
operRes[0]="3";
operRes[1]="对不起,出现错误,请重试或联系管理员进行处理";
operRes[2]="删除同步通讯录组失败";
Log.getInstance().printError(this.getClass().getName(),"删除同步通讯录组,根据ID查询组名称为null或者是空");
return operRes;
} }
//groupID和groupName都不为空之后进行下一步处理
//将数据库中所的同步通讯录组查找出来
List<String[]> groupList=this.getALLGroup();
if(groupList==null){
operRes[0]="3";
operRes[1]="对不起,出现错误,请重试或联系管理员进行处理";
operRes[2]="删除同步通讯录"+groupName+"组失败";
Log.getInstance().printError(this.getClass().getName(),"删除同步通讯录组,查询所有的同步通讯录组发送错误");
return operRes;
}
//创建一个List存放要删除的组和该组下的所有子组的Id
List<String> groupIDList=new ArrayList<String>();
//groupIDList存放所有的要删除的组的ID也就是改组以及其所有子组
groupIDList=findAllChildrenGroupID(groupList, groupIDList, groupID);
Connection conn=null;
PreparedStatement pst=null;
Statement st=null;
try{
conn=DataBaseManage.getInstance().getConnection();
st=conn.createStatement();
conn.setAutoCommit(false);
//count是一个计数器
int count=0;
for(int i=0;i<groupIDList.size();i++){
//当组ID不为空
if(groupIDList.get(i)!=null &&!"".equals(groupIDList.get(i))){
//删除组
String deleteGroupSQL="DELETE FROM t_enterprisebookgroup WHERE GroupID='"+groupIDList.get(i)+"'";
st.addBatch(deleteGroupSQL);
//删除该组下的成员
String deleteContactSQL="DELETE FROM t_enterprisegroupmembers WHERE EnterpriseGroupID='"+groupIDList.get(i)+"'";
st.addBatch(deleteContactSQL);
count++;
}
}
//如果批处理之中有要执行是数据执行批处理操作
if(count>0){
st.executeBatch();
}
conn.commit();
conn.setAutoCommit(true);
Log.getInstance().printInfo(this.getClass().getName(), "删除同步通讯录组"+groupName+"成功");
operRes[0]="1";
operRes[1]="删除同步通讯录组"+groupName+"成功";
operRes[2]="删除同步通讯录组"+groupName+"成功";
return operRes;
}catch(Exception ex){
ExceptionHeading.getException(this.getClass().getName(), ex, "删除同步通讯录组,事务操作执行失败,事务开始回轨");
try{
//事务回轨
conn.rollback();
Log.getInstance().printInfo(this.getClass().getName(), "删除同步通讯录组,事务回轨成功");
operRes[0]="3";
operRes[1]="对不起,出现错误,请重试或联系管理员进行处理";
operRes[2]="删除同步通讯录"+groupName+"组失败";
return operRes;
} catch(Exception e){
//事务回轨失败
ExceptionHeading.getException(this.getClass().getName(), ex, "删除同步通讯录组,事务操作回轨失败");
operRes[0]="3";
operRes[1]="对不起,出现错误,请重试或联系管理员进行处理";
operRes[2]="删除同步通讯录"+groupName+"组失败";
return operRes;
}
} finally{
DataBaseManage.getInstance().closeStatement(pst);
DataBaseManage.getInstance().closeStatement(st);
DataBaseManage.getInstance().releaseConnection(conn);
}
}

java_method_删除事务回滚的更多相关文章

  1. 【Java EE 学习 19】【使用过滤器实现全站压缩】【使用ThreadLocal模式解决跨DAO事务回滚问题】

    一.使用过滤器实现全站压缩 1.目标:对网站的所有JSP页面进行页面压缩,减少用户流量的使用.但是对图片和视频不进行压缩,因为图片和视频的压缩率很小,而且处理所需要的服务器资源很大. 2.实现原理: ...

  2. mysql数据库 索引 事务和事务回滚

    mysql索引 索引相当于书的目录优点:加快数据的查询速度缺点:占物理存储空间,添加,删除,会减慢写的速度 查看表使用的索引 mysql> show index from 表名\G;(\G分行显 ...

  3. [SQL]事务回滚详解及示例

    存储过程中的 SET XACT_ABORT ON 和事务 在存储过程中写SET XACT_ABORT ON 有什么用? SET XACT_ABORT ON是设置事务回滚的! 当为ON时,如果你存储中的 ...

  4. 为什么mysql事务回滚后, 自增ID依然自增

    事务回滚后,自增ID仍然增加,回滚后,自增ID仍然增加.比如当前ID是7,插入一条数据后,又回滚了.然后你再插入一条数据,此时插入成功,这时候你的ID不是8,而是9.因为虽然你之前插入回滚,但是ID还 ...

  5. springboot 事务回滚

    在springboot中,使用事务回滚时,添加@Transactional注解,然后在try-catch块中,发生异常时,在catch中 添加 TransactionAspectSupport.cur ...

  6. mysql分类和事务回滚

    主要内容: ***数据定义语言DDL重点 ***数据操纵语言DML重点 数据查询语言DQL重点 ---事务控制语言TCL ---数据库控制语言DCL ---主键(primary key) ---数据冗 ...

  7. [转] C# mysql 事务回滚

    什么是数据库事务 数据库事务是指作为单个逻辑工作单元执行的一系列操作. 设想网上购物的一次交易,其付款过程至少包括以下几步数据库操作: · 更新客户所购商品的库存信息 · 保存客户付款信息--可能包括 ...

  8. ThinkPHP实现事务回滚示例代码

    ThinkPHP的事务回滚示例如下: ? 1 2 3 4 5 6 7 8 9 10 $m=D('YourModel');//或者是M(); $m2=D('YouModel2'); $m->sta ...

  9. Spring中@Transactional事务回滚

    转载: Spring中@Transactional事务回滚 一.使用场景举例 在了解@Transactional怎么用之前我们必须要先知道@Transactional有什么用.下面举个栗子:比如一个部 ...

随机推荐

  1. POJ_3273_Monthly_Expense_(二分,最小化最大值)

    描述 http://poj.org/problem?id=3273 共n个月,给出每个月的开销.将n个月划分成m个时间段,求m个时间段中开销最大的时间段的最小开销值. Monthly Expense ...

  2. 转自 z55250825 的几篇关于FFT的博文(二)

    题目大意:高精度乘法.     fft的实现貌似有很多种,咱先写的是一种递归的fft,应该算是比较快的了吧.参考了 Evil君 的代码,那个运算符重载看的咱P党泪流满面. (没想到P竟然有运算符重载咩 ...

  3. 基于WebForm+EasyUI的业务管理系统形成之旅 -- 总体介绍

    一.系统总体介绍 企业业务管理系统是针对经营企业管理而开发的专业管理软件, 是以“精细管理.过程监控”为设计理念,全面满足企业的信息化管理需求,充分发挥专业.平台.灵活等优点. 集进销存.财务.CRM ...

  4. 关于NSLocalizedString(@"Foo %@",nil)

    NSLocalizedString(@"Foo %@",nil) 这句话实际上是在多语言文件中寻找一个key为“Foo %@”的文字,千万不要把这个和[NSString strin ...

  5. marvell笔试题(嵌入式软件)

    有幸去Marvell参加面试,由于其要求WCDMA/GSM之类的,我还特地恶补了下这方面的知识.后来坐了2个小时的地铁后,到达了Marvell.公司还蛮不错的,里面环境都还可以.我投了这家公司也是同学 ...

  6. 微软Azure运营方世纪互联遭做空后强劲反弹

    http://www.cnblogs.com/sennly/p/4135594.html 最近几天微软Azure的运营方世纪互联被Trinity做空,股价震荡巨大,先让我们回顾下整个事件: 9月11日 ...

  7. 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程06:技能播放的逻辑关系》

    6.技能播放的逻辑关系 技能播放概述: 当完成对技能输入与检测之后,程序就该对输入在缓存器中的按键操作与程序读取的技能表信息进行匹配,根据匹配结果播放相应的连招技能. 技能播放原理: 按键缓存器中内容 ...

  8. 【Java基础】成员变量和局部变量的区别

    在类中的位置不同 成员变量:在类内部方法外部 局部变量:在方法体内部定义的或者方法的参数中定义的在内存中的位置不同 成员变量:在堆内存,有初始化值,byte,short,int,long->0, ...

  9. HDOJ-ACM1019(JAVA) 多个数的最小公倍数

    题意:求多个数的最小公倍数 很简单,但是我一开始的做法,估计会让结果越界(超过int的最大值) import java.util.*; import java.io.*; public class M ...

  10. sql中用逗号拼接字符串

    MSSQL中可以用STUFF函数拼接成字符串. 如: SELECT FieldSomeElse, ( SELECT STUFF(( SELECT ',' + LinkField FROM Detail ...