mysql--事务demo1----
package com.etc.entity; import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Savepoint; import org.junit.Test; import com.etc.utils.JDBCUtil; public class TransactionDemo1 {
//@Test
public void testTransaction1()
{
Connection conn=null;
PreparedStatement st=null;
ResultSet rs=null; try {
conn = JDBCUtil.getConnection();
conn.setAutoCommit(false);//通知数据库开启事务
String sql1 = "update account set money=money-100 where name='A'";
st = conn.prepareStatement(sql1);
st.executeUpdate();
String sql2 = "update account set money=money+100 where name='B'";
st = conn.prepareStatement(sql2);
st.executeUpdate();
conn.commit();//通知提交事务
System.out.println("成功!");
} catch (Exception e) {
e.printStackTrace();
}
finally{
JDBCUtil.close(rs, st, conn);
} }
//@Test
public void testTransaction2()
{
Connection conn=null;
PreparedStatement st=null;
ResultSet rs=null;
try {
conn = JDBCUtil.getConnection();
conn.setAutoCommit(false);//通知数据库开启事务
String sql1 = "update account set money=money-100 where name='A'";
st = conn.prepareStatement(sql1);
st.executeUpdate();
int i=1/0;//异常语句 事务不能提交 数据库自动回滚
String sql2 = "update account set money=money+100 where name='B'";
st = conn.prepareStatement(sql2);
st.executeUpdate();
conn.commit();//通知提交事务
System.out.println("成功!");
} catch (Exception e) {
e.printStackTrace();
}
finally{
JDBCUtil.close(rs, st, conn);
} }
//@Test
public void testTransaction3()
{
Connection conn=null;
PreparedStatement st=null;
ResultSet rs=null;
try {
conn = JDBCUtil.getConnection();
conn.setAutoCommit(false);//通知数据库开启事务
String sql1 = "update account set money=money-100 where name='A'";
st = conn.prepareStatement(sql1);
st.executeUpdate();
int i=1/0;//异常语句
String sql2 = "update account set money=money+100 where name='B'";
st = conn.prepareStatement(sql2);
st.executeUpdate();
conn.commit();//通知提交事务
System.out.println("成功!");
} catch (Exception e) {
try {
conn.rollback();//异常发生后 手动通知数据库事务回滚
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
finally{
JDBCUtil.close(rs, st, conn);
} }
@Test //sql1有效;sql2无效;sql3无效;
public void testTransaction4()
{
Connection conn=null;
PreparedStatement st=null;
ResultSet rs=null;
Savepoint sp=null;//事务回滚点
try {
conn = JDBCUtil.getConnection();
conn.setAutoCommit(false);//通知数据库开启事务 String sql1 = "update account set money=money-100 where name='A'";
st = conn.prepareStatement(sql1);
st.executeUpdate(); sp=conn.setSavepoint();//设置事务回滚点 String sql2 = "update account set money=money+100 where name='B'";
st = conn.prepareStatement(sql2);
st.executeUpdate(); int i=1/0;//异常语句
String sql3 = "update account set money=money+100 where name='C'";
st = conn.prepareStatement(sql3);
st.executeUpdate(); conn.commit();//通知提交事务 } catch (Exception e) {
try {
conn.rollback(sp);//回滚到事务回滚点
conn.commit();//回滚之后提交
} catch (SQLException e1) { e1.printStackTrace();
}
e.printStackTrace();
}
finally{
JDBCUtil.close(rs, st, conn);
} }
}
mysql--事务demo1----的更多相关文章
- Mysql事务探索及其在Django中的实践(二)
继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...
- MySQL 事务
MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成 ...
- mysql事务和并发控制
谈到事务,首先想到的问题是并发控制.比如两个用户同时操作数据库里面的一张表,一个正在读数据,一个正在删除数据,那么读数据的读出的结果究竟是多少?并发可以提高系统的性能,让多个用户同时操作一份数据,但为 ...
- MySQL事务学习-->隔离级别
MySQL事务学习-->隔离级别 6 事务的隔离级别 设置的目的 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别. 数据库是要被广大客户所共享访问的,那么在数据库操作过程中 ...
- mysql 事务是专门用来管理insert,update,delete语句的,和select语句一点不相干
1.mysql 事务是专门用来管理insert,update,delete语句的,和select语句一点不相干 2.一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性).Con ...
- php mysql事务
这里记录一下php操作mysql事务的一些知识 要知道,MySQL默认的行为是在每条SQL语句执行后执行一个COMMIT语句,从而有效的将每条语句独立为一个事务.但是,在使用事务时,是需要执行多条sq ...
- mysql事务问题
mysql事务: 若mysql 开启事务后START TRANSACTION ,不显示提交commit,则默认自动回滚,而不是默认自动提交.
- MYSQL事务和锁
mysql事务(一)—转载 2012年12月20日 ⁄ Mysql数据库, 技术交流 ⁄ 暂无评论 一. 什么是事务 事务就是一段sql 语句的批处理,但是这个批处理是一个atom(原子) ,不可分割 ...
- MySQL事务内幕与ACID
MySQL的事务实现严格遵循ACID特性,即原子性(atomicity),一致性(consistency),隔离性(isolation),持久性(durability).为了避免一上来就陷入对ACID ...
- 数据库 Mysql事务详解
Mysql事务 mysql的事务默认是自动提交的,也就是你提交一个query,他就直接执行!我们可以通过 禁止自动提交 开启自动提交 //mysql事务 #include <stdio.h> ...
随机推荐
- 安装Eclipsemaven插件
Maven的Eclipse插件m2eclipse的安装 The goal of the m2ec project is to provide a first-class Apache Maven su ...
- python cookbook第三版学习笔记十七:委托属性
我们想在访问实例的属性时能够将其委托到一个内部持有的对象上,这经常用到代理机制上 class A: def spam(self,x): print("class_A: ...
- 网络端口的作用及分类(转发:http://blog.csdn.net/dream_1996/article/details/73481201)
一.什么是端口? 在开始讲什么是端口(port)之前,我们先来聊一聊什么是 port 呢?常常在网络上听说『我的主机开了多少的 port ,会不会被入侵呀!?』或者是说『开那个 port 会比较安全? ...
- ggplot2绘图系统
ggplot2包实现了一个在R中基于全面一致的语法创建图形时的系统 .在ggplot2中,图是采用串联起来(+)号函数创建的.详细内容参见<ggplot2:数据分析与图形艺术>,这里只简要 ...
- SQL性能优化常用语句(摘录网上)
1.把trace文件导入到表中 , ) AS RowNumber,* into TableName FROM fn_trace_gettable('trace.trc', default) 2.查询C ...
- CenterFactory
<?php /* 实例3 */ /* 抽象工厂 */ //青铜会员的打折商品 class BronzeRebateCommodity { //描述 public $desc = '青铜会员的打折 ...
- DNS 原理入门 (转)
DNS 是互联网核心协议之一.不管是上网浏览,还是编程开发,都需要了解一点它的知识. 本文详细介绍DNS的原理,以及如何运用工具软件观察它的运作.我的目标是,读完此文后,你就能完全理解DNS. 一.D ...
- RTMP & HLS
一,直播云架构 2. RTMP 协议 RTMP(Real Time Messaging Protocol)是Adobe Systems公司为Flash播放器和服务器之间音频.视频和数据传输开发的开放协 ...
- 【leetcode刷题笔记】Linked List Cycle II
Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Foll ...
- 对类型化数组(Typed Array)与ArrayBuffer的理解 转囧囧
类型化数组(Typed Array)也是HTML5中新引入的API.用一句话解释类型化数组就是:它是JS操作二进制数据的接口. 众所周知,直接操作二进制数据可以使程序更为高效, 尽管JS对常规数组做了 ...