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> ...
随机推荐
- Render a controller in Twig - Unexpected “render” tag - expecting closing tag for the “block” tag defined
Render a controller in Twig - Unexpected “render” tag - expecting closing tag for the “block” tag de ...
- Struts2-Value Stack浅析
http://my.oschina.net/mlongbo/blog/88250 Value Stack的作用: 1. 可以作为一个数据中转站 2. 用于在前台-后台之间传递数 ...
- linux shell 基础 使用日志与心得
linux shell 基础 使用日志与心得 1.#!/bin/bash 第一行就出现#!/bin/bash是指此脚本使用/bin/bash来解释执行.其中,#!是一个特殊的表示符,其后,跟着解释此脚 ...
- php匹配字符串中大写字母的位置
变量名用的是驼峰,数据库中字段中的是下划线,现在想把userId等变量批量转换成user_id,怎么样获取大写字母在字符串中的位置?echo strtolower(preg_replace('/((? ...
- Jmeter使用文档(windows)
1. 安装jdk并配置环境变量 以1.8为例: (1)安装jdk1.8; (2)在系统变量里点击新建,变量名填写JAVA_HOME,变量值填写JDK的安装路径“C:\Program Files\Jav ...
- 【Flask】Sqlalchemy 增删该查操作
### sqlalchemy 增删改查操作, 通过session来进行操作. # coding:utf-8 # Author: liangjun. from sqlalchemy import cre ...
- 左侧图片 右侧块的实现方法---解决3像素bug的一种解决方案,不用浮动用绝对定位和margin-left
google的实现方式是: <div class="mw"> <a href="/" id="mlogo"> &l ...
- 面试问题(HTML和CSS方面)
1 IE/Win的 HasLayout 2 浮动 float 的定义.float后元素的display属性会发生改变吗?3 CSS 3.0.CSS2.1 中被现代浏览器应用了的规则有哪些?4 父元素定 ...
- 07 09&10
0709: 排名还是不高,毕竟没切出来题. 第一题dalao: 要求你做一个三维数点,只回答最终有多少个点对的状态是完全小于(可比?)的.(n<=2000000) 特殊限制是三维都是随机排列. ...
- Ubuntu dpkg 查询已安装的软件包
要检查特定的包,比如firefox是否安装了,使用这个命令: dpkg -s firefox 要列出你系统中安装的所有包,输入下面的命令: dpkg --get-selections 你同样可以通过g ...