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> ...
随机推荐
- scikit-learn(project中用的相对较多的模型介绍):1.14. Semi-Supervised
參考:http://scikit-learn.org/stable/modules/label_propagation.html The semi-supervised estimators insk ...
- linux c编程:FIFO
前面介绍的pipe属于匿名管道 管道的主要局限性正体现在它的特点上: 只支持单向数据流: 只能用于具有亲缘关系的进程之间: 没有名字: 管道的缓冲区是有限的(管道制存在于内存中,在管道创建时,为缓冲区 ...
- python+NLTK 自然语言学习处理四:获取文本语料和词汇资源
在前面我们通过from nltk.book import *的方式获取了一些预定义的文本.本章将讨论各种文本语料库 1 古腾堡语料库 古腾堡是一个大型的电子图书在线网站,网址是http://www.g ...
- android禁止横屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
- 关于align-items和align-content的区别和使用场景
最近在研究flex布局,容器中有两个属性,是用来定义crossAxis测轴排列方式的.一开始接触align-items还可以理解感觉不难,后来看到align-content就感觉有点混淆了,特开一篇博 ...
- PHP数组各种操作与函数汇总
对于Web编程来说,最重要的就是存取和读写数据了.存储方式可能有很多种,可以是字符串.数组.文件的形式等.数组,可以说是PHP的数据应用中较重要的一种方式.PHP的数组函数众多,下面是我学习的小结,借 ...
- Elasticsearch使用记录
Elasticsearch使用记录 Elasticsearch的搭建方法 1.RPM方式搭建 首先去官网[https://www.elastic.co/downloads/elasticsearch# ...
- this.Hide()与this.Visible、Application.Exit与this.Close()区别
首先明确this.Hide()和this.Visible作用完全一样,都是隐藏当前窗体,使其不可见:Application.Exit与this.Close()虽然都有关闭当前应用的作用,但作用不同. ...
- while 读取文件内容
exec < filename while read line;do echo $line done 方法1 while read line;do echo $line done<$ 方法 ...
- POJ2253 frogger 最短路 floyd
#include<iostream>#include<algorithm>#include<stdio.h>#include<string.h>#inc ...