Java事务处理类(源码)
今天晚上写了一个Java关于Mysql数据库的事物处理类,实现回滚&&部分回滚功能。
Mysql5很好的支持了事物处理功能。不过支持这个功能的只有两种表类型。
分别是BDB,InnoDB。
先建立一个表,名为Kiss,数据为id (int),name(varchar),pop(varchar)。
下面是源码:
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冲突,则实现回滚。
下面是部分回滚:
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();
}
}
}
}
代码测试通过,完美运行。
施杨出品!!!
转载于:https://www.cnblogs.com/shiyangxt/archive/2008/08/16/1269065.html
Java事务处理类(源码)相关推荐
- Java String类源码阅读笔记
文章目录 一.前置 二.String类源码解析 1.String类继承关系 2.成员变量 3.构造方法 4.长度/判空 5.取字符 6.比较 7.包含 8.hashCode 9.查询索引 10.获取子 ...
- java int类源码,一起学JDK源码 -- Integer类
Integer类为java基本类型int的包装类,除了前面提到的Byte类,Short类中的大部分方法,Integer类中还提供了很多处理int类型的方法,接下来就让我们一起看看吧. 基础知识: 1. ...
- java工具类源码阅读,java学习日记第二天(实用的工具类和源码解析一Arrays)
本帖最后由 三木猿 于 2020-9-18 11:17 编辑 每日名言 学者须先立志.今日所以悠悠者,只是把学问不曾做一件事看,遇事则且胡乱恁地打过了,此只是志不立. --朱熹 工作中经常会用到一些工 ...
- Java Thread类源码详解
概述 Java所有多线程的实现,均通过封装Thread类实现,所以深入Thread类,对深入理解java多线程很有必要 构造函数: Thread的构造函数,采用缺省的方式实现: //传入Runnabl ...
- Java String类源码解析
String直接继承Object 含有一个char[] value,还有一个int hash默认值为0 new String()的构造产生的是一个值为""的字符数组 String( ...
- Java Optional类源码解析和用法
个人网站:http://xiaocaoshare.com/ 要求:jdk1.8以上 Optional类是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get( ...
- Java LinkedHashMap类源码解析
摘要: LinkedHashMap继承了HashMap,他在HashMap的基础上增加了一个双向链表的结构,链表默认维持key插入的顺序,重复的key值插入不会改变顺序,适用于使用者需要返回一个顺序相 ...
- java.lang 源码剖析_java.lang.Void类源码解析
在一次源码查看ThreadGroup的时候,看到一段代码,为以下: /* * @throws NullPointerException if the parent argument is {@code ...
- java的数组与Arrays类源码详解
java的数组与Arrays类源码详解 java.util.Arrays 类是 JDK 提供的一个工具类,用来处理数组的各种方法,而且每个方法基本上都是静态方法,能直接通过类名Arrays调用. 类的 ...
- java的String类源码详解
java的String类源码详解 类的定义 public final class Stringimplements java.io.Serializable, Comparable<String ...
最新文章
- Java(CallableStatement)调用Oracle存储过程返回结果集(ResultSet)
- 安卓能帮你检查密码泄露了!还有Messages定时发送等多项功能优化
- Python语言学习 (七)1.1
- 3.5 Facade(外观)
- Django讲课笔记09:使用QuerySet新增和更新数据
- CCS中的cmd命令文件
- java 注解开发 解耦_Java提升七:注解
- org.apache.hadoop.hbase.TableNotDisabledException 解决方法
- PMP第六节:项目进度管理
- 磊科linux无线网卡驱动安装步骤,磊科nw360无线网卡安装教程(附磊科nw360驱动下载)...
- 2023年前实现大型工业企业5G应用渗透率超35%!模组企业如何保驾护航?
- 大数据的核心架构层是哪些?
- [4G5G专题-91]:流程 - 4G LTE 终端移动性管理总体概述
- (一)WaveDrom 数字时序图渲染引擎
- 简单理解云桌面的模板,桌面池和虚拟机的概念
- 函数式编程与Lambda表达式
- 安全防御之入侵检测篇
- java clob http传送_JAVA CLOB作为参数传给ORACLE后台
- Oracle 正则表达式以及常用正则函数
- 【gdgzezoi】Problem C: The Winds of Winter
热门文章
- LeetCode Clone Graph(搜索问题)
- luoguP2657 [SCOI2009]windy数
- scikit-learn 多分类混淆矩阵
- C#编译器选项(目标平台)
- STL 中priority_queue小结
- 基于网络音频的Android播放程序简单示例
- [转] 大连理工大学部分有效FTP列表1.0
- 未来智能社会的一砖一瓦都需要今天我们一点点的探索发现!
- c语言怎么写到单片机里,哪位师傅知道51单片机怎样编写子程序?C语言的。在主程序里调...
- KVM半虚拟化驱动--virtio概述和基本原理(四)