Java事务处理类(源码)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

Mysql5很好的支持了事物处理功能。不过支持这个功能的只有两种表类型。

 

分别是BDB,InnoDB。

 

先建立一个表,名为Kiss,数据为id (int),name(varchar),pop(varchar)。

 

下面是源码:

 

复制代码
import  java.sql. * ;

public   class  TestCommit {
    
public static void main(String args[]){
    Connection conn
=null;
    
try{
       Class.forName(
"com.mysql.jdbc.Driver");
       String url
="jdbc:mysql://localhost:3306/kiss";
       conn
=DriverManager.getConnection(url,"username","password");
       
boolean autoCommit=conn.getAutoCommit();
       
//关闭自动提交功能
       conn.setAutoCommit(false);
       Statement stmt
=conn.createStatement();
       stmt.executeUpdate(
"insert into sun values(15,'Hello','Beijing')");
       stmt.executeUpdate(
"insert into sun values(16,'Hi','shanghai')");
       ResultSet rs
=stmt.executeQuery("select * from sun");
       
while(rs.next()){
            System.out.print(
"DeptNo:"+rs.getInt(1));
            System.out.print(
"\tDeptName:"+rs.getString(2));
            System.out.println(
"\tLOC:"+rs.getString(3));
}
   
//提交事务
    conn.commit();
//恢复原来的提交模式
    conn.setAutoCommit(autoCommit);
    stmt.close();
}
catch(Exception e){
    System.out.println(
"操作失败!!!任务撤销!!!");
    
try{
        
//回滚、取消前述操作
        conn.rollback();
    }
catch(Exception e1){
      e1.printStackTrace();
    }

}
finally{
   
try{
         
if(conn!=null){
            conn.close();
         }

   }
catch(Exception e1){
     e1.printStackTrace();
    }

   }

    }

}
复制代码

 

 

执行第一次执行这个类,id如果不冲突,就可以顺利插入数据,第二次插入,id冲突,则实现回滚。

 

下面是部分回滚:

 

 

 

复制代码
import  java.sql. * ;

public   class  TestSavepoint {
    
public static void main(String args[]){
    Connection conn
=null;
    
try{
       Class.forName(
"com.mysql.jdbc.Driver");
       String url
="jdbc:mysql://localhost:3306/kiss";
       conn
=DriverManager.getConnection(url,"username","password");
       
boolean autoCommit=conn.getAutoCommit();
       
//关闭自动提交功能
       conn.setAutoCommit(false);
       Statement stmt
=conn.createStatement();
       stmt.executeUpdate(
"insert into sun values(21,'Hello','Beijing')");
       stmt.executeUpdate(
"insert into sun values(22,'Hi','shanghai')");
       Savepoint sp1
=conn.setSavepoint("p1");
       stmt.executeUpdate(
"insert into sun values(25,'shiyang','xingtai')");
       Savepoint sp2
=conn.setSavepoint("p2");
       stmt.executeUpdate(
"insert into sun values(60,'shiyang','baoding')");
       ResultSet rs
=stmt.executeQuery("select avg(id) from sun");
       rs.next();
       
double avg_id=rs.getDouble(1);
       
if(avg_id>100){
         conn.rollback(sp1);
       }
else if(avg_id>30){
         conn.rollback(sp2);
       }

       conn.commit();
       rs
=stmt.executeQuery("select * from sun");
       
while(rs.next()){
            System.out.print(rs.getInt(
1));
            System.out.print(
"\t"+rs.getString(2).trim());
            System.out.println(
"\t"+rs.getString(3));
}
   
rs.close();
stmt.close();
    }
catch(Exception e){
      System.out.println(
"Failure.rollback!!!");
   
try{
       conn.rollback();
   }
catch(Exception e1){
     e1.printStackTrace();
    }

    e.printStackTrace();
   }
finally{
     
try{
       
if(conn!=null){
         conn.close();
       }

     }
catch(Exception e1){
       e1.printStackTrace();
     }

   }

    }

}
复制代码

 

代码测试通过,完美运行。


本文转自施杨博客园博客,原文链接:http://www.cnblogs.com/shiyangxt/archive/2008/08/16/1269065.html,如需转载请自行联系原作者

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
51
分享
相关文章
JUC并发—1.Java集合包底层源码剖析
本文主要对JDK中的集合包源码进行了剖析。
|
2天前
|
【源码】【Java并发】【ConcurrentHashMap】适合中学体质的ConcurrentHashMap
本文深入解析了ConcurrentHashMap的实现原理,涵盖JDK 7与JDK 8的区别、静态代码块、构造方法、put/get/remove核心方法等。JDK 8通过Node数组+链表/红黑树结构优化并发性能,采用CAS和synchronized实现高效锁机制。文章还详细讲解了hash计算、表初始化、扩容协助及计数更新等关键环节,帮助读者全面掌握ConcurrentHashMap的工作机制。
34 6
智慧工地源码,Java语言开发,微服务架构,支持分布式和集群部署,多端覆盖
智慧工地是“互联网+建筑工地”的创新模式,基于物联网、移动互联网、BIM、大数据、人工智能等技术,实现对施工现场人员、设备、材料、安全等环节的智能化管理。其解决方案涵盖数据大屏、移动APP和PC管理端,采用高性能Java微服务架构,支持分布式与集群部署,结合Redis、消息队列等技术确保系统稳定高效。通过大数据驱动决策、物联网实时监测预警及AI智能视频监控,消除数据孤岛,提升项目可控性与安全性。智慧工地提供专家级远程管理服务,助力施工质量和安全管理升级,同时依托可扩展平台、多端应用和丰富设备接口,满足多样化需求,推动建筑行业数字化转型。
37 5
Java 类和对象
本文介绍了Java编程中类和对象的基础知识,作为面向对象编程(OOP)的核心概念。类是对象的蓝图,定义实体类型;对象是具体实例,包含状态和行为。通过示例展示了如何创建表示汽车的类及其实例,并说明了构造函数、字段和方法的作用。同时,文章还探讨了访问修饰符的使用,强调封装的重要性,如通过getter和setter控制字段访问。最后总结了类与对象的关系及其在Java中的应用,并建议进一步学习继承等概念。
|
7天前
|
【源码】【Java并发】【LinkedBlockingQueue】适合中学体质的LinkedBlockingQueue入门
前言 有了前文对简单实用的学习 【Java并发】【LinkedBlockingQueue】适合初学体质的LinkedBlockingQueue入门 聪明的你,一定会想知道更多。哈哈哈哈哈,下面主播就...
35 6
【源码】【Java并发】【LinkedBlockingQueue】适合中学体质的LinkedBlockingQueue入门
|
8天前
|
【源码】【Java并发】【ArrayBlockingQueue】适合中学者体质的ArrayBlockingQueue
前言 通过之前的学习是不是学的不过瘾,没关系,马上和主播来挑战源码的阅读 【Java并发】【ArrayBlockingQueue】适合初学体质的ArrayBlockingQueue入门 还有一件事
39 5
【源码】【Java并发】【ArrayBlockingQueue】适合中学者体质的ArrayBlockingQueue
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
157 70
|
11天前
|
【源码】【Java并发】【ReentrantLock】适合中学者体质的ReentrantLock源码阅读
因为本文说的是ReentrantLock源码,因此会默认,大家对AQS有基本的了解(比如同步队列、条件队列大概> 长啥样?)。 不懂AQS的小朋友们,你们好呀!也欢迎先看看这篇
59 13
【源码】【Java并发】【ReentrantLock】适合中学者体质的ReentrantLock源码阅读
|
12天前
|
java中一个接口A,以及一个实现它的类B,一个A类型的引用对象作为一个方法的参数,这个参数的类型可以是B的类型吗?
本文探讨了面向对象编程中接口与实现类的关系,以及里氏替换原则(LSP)的应用。通过示例代码展示了如何利用多态性将实现类的对象传递给接口类型的参数,满足LSP的要求。LSP确保子类能无缝替换父类或接口,不改变程序行为。接口定义了行为规范,实现类遵循此规范,从而保证了多态性和代码的可维护性。总结来说,接口与实现类的关系天然符合LSP,体现了多态性的核心思想。
23 0
|
14天前
|
【源码】【Java并发】从InheritableThreadLocal和TTL源码的角度来看父子线程传递
本文涉及InheritableThreadLocal和TTL,从源码的角度,分别分析它们是怎么实现父子线程传递的。建议先了解ThreadLocal。
51 4
【源码】【Java并发】从InheritableThreadLocal和TTL源码的角度来看父子线程传递