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. Discuz! x3.1的插件/utility/convert/index.php代码执行漏洞

    漏洞版本: Discuz! x3.1及以下版本 漏洞描述: Discuz! x3.1的插件/utility/convert/index.php存在代码执行漏洞,如果用户在使用完之后不删除,会导致网站容 ...

  2. Azure Backup 入门

    Viswanath Tata 云 + Enterprise项目经理 Azure Backup是一款允许客户将数据备份到 Azure的强大工具.请参阅这篇文章,快速了解 Azure Backup.我 ...

  3. 【转】plist文件的内容清空

    原文网址:http://zhidao.baidu.com/link?url=3aQGrNnqL2UgQ3UW_RWJJq0ADBmY8zQrpy09j6ScDZEAOd87f-D4bAABog5RFS ...

  4. SharePoint 2010在win7 x64 安装

    转:http://kaneboy.blog.51cto.com/1308893/328000 关于<SharePoint 2010应用程序开发指南>,我和杜伟同学正在撰写中,希望下半年早点 ...

  5. Sharepoint数据库存储过程

    转:http://dugan.bokee.com/630497.html Databases Table Stored Procedures(数据库表存储过程) Globals Table Store ...

  6. epub格式电子书剖析之三:NCX文件构成

    ncx文件是epub电子书的又一个核心文件,用于制作电子书的目录,其文件的命名通常为toc.ncx. ncx文件是一个XML文件,该标准由DAISY Consortium发布(参见http://www ...

  7. Yet Another Scheme Introduction学习

    Chapter 2 Function exact->inexact is to convert from fractional numbers to floating point numbers ...

  8. POJ -- 3842

    An Industrial Spy   Description Industrial spying is very common for modern research labs. I am such ...

  9. Javascript的简介和使用

    摘要:先讨论JavaScript的由来和一些比较容易混淆的概念,又讨论了JavaScript的实现,紧接着说明了在网页中怎么有效地更好地引入js代码. JavaScript的由来 是从一个简单的输入验 ...

  10. 潜语义分析(Latent Semantic Analysis)

    LSI(Latent semantic indexing, 潜语义索引)和LSA(Latent semantic analysis,潜语义分析)这两个名字其实是一回事.我们这里称为LSA. LSA源自 ...