jdbc 事务

jdbc 事务

目录

事务特性:

Mysql的TCL(Transaction Control Language)

Jdbc事务控制


事务特性:

  1. 原子性:强调事务的不可分割
  2. 一致性:强调的是事务执行的前后,数据的完整性要保持一致
  3. 隔离性:一个事务的执行不应该受到其他事务的干扰
  4. 持久性:事务一旦结束(提交/回滚)数据就持久保持到了数据库。

Mysql的TCL(Transaction Control Language)

  • set antocommit=false; 设置手动提交;
  • rollback 回滚;
  • commit 提交。

代码如下:

mysql> use mybase;
Database changed
mysql> desc test;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| empno    | int(11)     | NO   | PRI | NULL    | auto_increment |
| ename    | varchar(20) | YES  |     | NULL    |                |
| job      | varchar(20) | YES  |     | NULL    |                |
| mgr      | int(11)     | YES  |     | NULL    |                |
| hiredate | date        | YES  |     | NULL    |                |
| sal      | double(7,2) | YES  |     | NULL    |                |
| COMMIT   | double(7,2) | YES  |     | NULL    |                |
| deptno   | int(11)     | YES  | MUL | NULL    |                |
+----------+-------------+------+-----+---------+----------------+
8 rows in set (0.00 sec)

mysql> select * from test;
+-------+--------+--------+------+------------+----------+--------+--------+
| empno | ename  | job    | mgr  | hiredate   | sal      | COMMIT | deptno |
+-------+--------+--------+------+------------+----------+--------+--------+
|  1001 | 小白   | clerk  | 1001 | 2020-07-25 |  5000.00 | 200.00 |   NULL |
|  1002 | 白展堂 | clerk  | 1001 | 1983-05-09 |  7000.00 | 200.00 |     10 |
|  1003 | 李大嘴 | clerk  | 1002 | 1980-07-08 |  8000.00 | 100.00 |     10 |
|  1004 | 吕秀才 | clerk  | 1002 | 1985-11-12 |  4000.00 |   NULL |     10 |
|  1005 | 郭芙蓉 | clerk  | 1002 | 1985-03-04 |  4000.00 |   NULL |     10 |
|  2001 | 胡一菲 | leader | NULL | 1994-03-04 | 15000.00 |   NULL |     20 |
|  2002 | 陈美嘉 | manger | 2001 | 1993-05-24 | 10000.00 | 300.00 |     20 |
|  2003 | 吕子乔 | clerk  | 2002 | 1995-05-19 |  7300.00 | 100.00 |     20 |
|  2004 | 张伟   | clerk  | 2002 | 1994-10-12 |  8000.00 | 500.00 |     20 |
|  2005 | 曾小贤 | clerk  | 2002 | 1993-05-10 |  9000.00 | 700.00 |     20 |
|  3001 | 刘梅   | leader | NULL | 1968-08-08 | 13000.00 |   NULL |     30 |
|  3002 | 夏冬梅 | manger | 3001 | 1968-09-21 | 10000.00 | 600.00 |     30 |
|  3003 | 夏雪   | clerk  | 3002 | 1989-09-21 |  8000.00 | 300.00 |     30 |
|  3004 | 张一山 | clerk  | 3002 | 1991-06-16 | 88000.00 | 200.00 |     30 |
+-------+--------+--------+------+------------+----------+--------+--------+
14 rows in set (0.00 sec)

mysql> insert into test (ename,job,commit) values('marry','clerk',300);
Query OK, 1 row affected (0.01 sec)

mysql> select * from test;
+-------+--------+--------+------+------------+----------+--------+--------+
| empno | ename  | job    | mgr  | hiredate   | sal      | COMMIT | deptno |
+-------+--------+--------+------+------------+----------+--------+--------+
|  1001 | 小白   | clerk  | 1001 | 2020-07-25 |  5000.00 | 200.00 |   NULL |
|  1002 | 白展堂 | clerk  | 1001 | 1983-05-09 |  7000.00 | 200.00 |     10 |
|  1003 | 李大嘴 | clerk  | 1002 | 1980-07-08 |  8000.00 | 100.00 |     10 |
|  1004 | 吕秀才 | clerk  | 1002 | 1985-11-12 |  4000.00 |   NULL |     10 |
|  1005 | 郭芙蓉 | clerk  | 1002 | 1985-03-04 |  4000.00 |   NULL |     10 |
|  2001 | 胡一菲 | leader | NULL | 1994-03-04 | 15000.00 |   NULL |     20 |
|  2002 | 陈美嘉 | manger | 2001 | 1993-05-24 | 10000.00 | 300.00 |     20 |
|  2003 | 吕子乔 | clerk  | 2002 | 1995-05-19 |  7300.00 | 100.00 |     20 |
|  2004 | 张伟   | clerk  | 2002 | 1994-10-12 |  8000.00 | 500.00 |     20 |
|  2005 | 曾小贤 | clerk  | 2002 | 1993-05-10 |  9000.00 | 700.00 |     20 |
|  3001 | 刘梅   | leader | NULL | 1968-08-08 | 13000.00 |   NULL |     30 |
|  3002 | 夏冬梅 | manger | 3001 | 1968-09-21 | 10000.00 | 600.00 |     30 |
|  3003 | 夏雪   | clerk  | 3002 | 1989-09-21 |  8000.00 | 300.00 |     30 |
|  3004 | 张一山 | clerk  | 3002 | 1991-06-16 | 88000.00 | 200.00 |     30 |
|  3005 | marry  | clerk  | NULL | NULL       |     NULL | 300.00 |   NULL |
+-------+--------+--------+------+------------+----------+--------+--------+
15 rows in set (0.00 sec)

mysql> set autocommit = false;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into helln test (ename,job,commit) values('marry','clerk',300);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
MySQL server version for the right syntax to use near 'test (ename,job,commit) v
',300)' at line 1
mysql> insert into test (ename,job,commit) values('helln','clerk',300);
Query OK, 1 row affected (0.00 sec)

mysql> select * from test;
+-------+--------+--------+------+------------+----------+--------+--------+
| empno | ename  | job    | mgr  | hiredate   | sal      | COMMIT | deptno |
+-------+--------+--------+------+------------+----------+--------+--------+
|  1001 | 小白   | clerk  | 1001 | 2020-07-25 |  5000.00 | 200.00 |   NULL |
|  1002 | 白展堂 | clerk  | 1001 | 1983-05-09 |  7000.00 | 200.00 |     10 |
|  1003 | 李大嘴 | clerk  | 1002 | 1980-07-08 |  8000.00 | 100.00 |     10 |
|  1004 | 吕秀才 | clerk  | 1002 | 1985-11-12 |  4000.00 |   NULL |     10 |
|  1005 | 郭芙蓉 | clerk  | 1002 | 1985-03-04 |  4000.00 |   NULL |     10 |
|  2001 | 胡一菲 | leader | NULL | 1994-03-04 | 15000.00 |   NULL |     20 |
|  2002 | 陈美嘉 | manger | 2001 | 1993-05-24 | 10000.00 | 300.00 |     20 |
|  2003 | 吕子乔 | clerk  | 2002 | 1995-05-19 |  7300.00 | 100.00 |     20 |
|  2004 | 张伟   | clerk  | 2002 | 1994-10-12 |  8000.00 | 500.00 |     20 |
|  2005 | 曾小贤 | clerk  | 2002 | 1993-05-10 |  9000.00 | 700.00 |     20 |
|  3001 | 刘梅   | leader | NULL | 1968-08-08 | 13000.00 |   NULL |     30 |
|  3002 | 夏冬梅 | manger | 3001 | 1968-09-21 | 10000.00 | 600.00 |     30 |
|  3003 | 夏雪   | clerk  | 3002 | 1989-09-21 |  8000.00 | 300.00 |     30 |
|  3004 | 张一山 | clerk  | 3002 | 1991-06-16 | 88000.00 | 200.00 |     30 |
|  3005 | marry  | clerk  | NULL | NULL       |     NULL | 300.00 |   NULL |
|  3006 | helln  | clerk  | NULL | NULL       |     NULL | 300.00 |   NULL |
+-------+--------+--------+------+------------+----------+--------+--------+
16 rows in set (0.00 sec)

mysql> roollback;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
MySQL server version for the right syntax to use near 'roollback' at line 1
mysql> rollback;
Query OK, 0 rows affected (0.01 sec)

mysql> select * from test;
+-------+--------+--------+------+------------+----------+--------+--------+
| empno | ename  | job    | mgr  | hiredate   | sal      | COMMIT | deptno |
+-------+--------+--------+------+------------+----------+--------+--------+
|  1001 | 小白   | clerk  | 1001 | 2020-07-25 |  5000.00 | 200.00 |   NULL |
|  1002 | 白展堂 | clerk  | 1001 | 1983-05-09 |  7000.00 | 200.00 |     10 |
|  1003 | 李大嘴 | clerk  | 1002 | 1980-07-08 |  8000.00 | 100.00 |     10 |
|  1004 | 吕秀才 | clerk  | 1002 | 1985-11-12 |  4000.00 |   NULL |     10 |
|  1005 | 郭芙蓉 | clerk  | 1002 | 1985-03-04 |  4000.00 |   NULL |     10 |
|  2001 | 胡一菲 | leader | NULL | 1994-03-04 | 15000.00 |   NULL |     20 |
|  2002 | 陈美嘉 | manger | 2001 | 1993-05-24 | 10000.00 | 300.00 |     20 |
|  2003 | 吕子乔 | clerk  | 2002 | 1995-05-19 |  7300.00 | 100.00 |     20 |
|  2004 | 张伟   | clerk  | 2002 | 1994-10-12 |  8000.00 | 500.00 |     20 |
|  2005 | 曾小贤 | clerk  | 2002 | 1993-05-10 |  9000.00 | 700.00 |     20 |
|  3001 | 刘梅   | leader | NULL | 1968-08-08 | 13000.00 |   NULL |     30 |
|  3002 | 夏冬梅 | manger | 3001 | 1968-09-21 | 10000.00 | 600.00 |     30 |
|  3003 | 夏雪   | clerk  | 3002 | 1989-09-21 |  8000.00 | 300.00 |     30 |
|  3004 | 张一山 | clerk  | 3002 | 1991-06-16 | 88000.00 | 200.00 |     30 |
|  3005 | marry  | clerk  | NULL | NULL       |     NULL | 300.00 |   NULL |

温馨提示:编码格式为utf-8可能会出现乱码的情况,

解决办法之一:

打开mysql安装的地址,打开,my.ini. 并更改默认编码。查看汉字的话,建议用gBK

jdbc 事务jdbc 事务

 

 


 

Jdbc事务控制

默认事务提交策略:一条命令自成一个完整事务

需求:各个逻辑单元要么一起成功,要么一起失败(比如银行转账)

手动控制事务的API

conn.setAutoCommit(false);将jdbc的事务提交改为手动提交

conn.commit(); 

conn.rollback();

注意:连接提交策略一经设置,永久改变。

package jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import util.jdbcUtil;

//jdbc控制事务
public class TestTrasaction {
	
	public static void main(String[] args) {
		Connection conn = null;
		PreparedStatement pstm1 = null;
		PreparedStatement pstm2 = null;
		//获得连接
		try {
			conn = jdbcUtil.getConnection();
			//将jdbc事务设置成手动提交
			conn.setAutoCommit(false);
			//降职操作
			String sql1 = "update test set job ='clerk' where ename='刘梅'";
			pstm1 = conn.prepareStatement(sql1);//创建对象
			pstm1.executeUpdate();//处理数据
		
			//降奖金操作
			String sql2 = "update test set commit=100 where ename = '刘梅'";
			pstm2 = conn.prepareStatement(sql2);
			pstm2.executeUpdate();
			//提交事务
			conn.commit();
			
		} catch (Exception e) {
		
			try {
				conn.rollback();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		}finally{
			try {
				jdbcUtil.release(null, pstm1, null);//先关闭pstm1
				jdbcUtil.release(null, pstm2, conn);//在关闭pstm2,conn
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

手动提交,好处就是可以回滚,然后,如果不一致,就无法进行操作,适用于银行转账等特定的操作。

不然你花了一w元,然而,银行账户上的钱没变化,那就糟糕了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/114781.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • HDU 3788 和九度OJ 1006测试数据是不一样的

    HDU 3788 和九度OJ 1006测试数据是不一样的

  • Oracle 11g AMM与ASMM切换

    Oracle 11g AMM与ASMM切换现在的Oracle正在往智能化方向发展。如果我们现在找一些8i/9i时代的Oracle书籍,怎么样配置合适的数据库各内存池大小是非常重要的话题。但是进入10g之后,自动内存池调节成为一个重要Oracle特性。在10g时,Oracle推出了ASMM(AutomaticSharedMemoryManagement),实现了OracleSGA和PGA内部结构的自调节。进入11g之后,AMM(A…

  • 预训练和微调_pre-listening

    预训练和微调_pre-listening什么是预训练和微调?预训练(pre-training/trained):你需要搭建一个网络来完成一个特定的图像分类的任务。首先,你需要随机初始化参数,然后开始训练网络,不断调整直到网络的损失越来越小

  • adas毫米波雷达_雷达探测障碍物是超声波吗

    adas毫米波雷达_雷达探测障碍物是超声波吗ADAS超声波雷达在倒车入库,慢慢挪动车子的过程中,在驾驶室内能听到”滴滴滴“的声音,这些声音就是根据超声波雷达的检测距离给司机的反馈信息。倒车雷达系统,英文全称为REVERSING/PARKINGAIDSUBSYSTEM,BACKSENSOR或PACKINGSENSOR,英文简称RPA。目前被各种轿车特别是高级轿车作为汽车电装品的标准配置或售后的汽车电装品主是选配品,例如:德国…

  • 浅谈安防监控中视频图像处理技术

    浅谈安防监控中视频图像处理技术2019-08-1521:39:20随着计算机软件、硬件技术的日新月异的发展和普及,人类已经进入一个高速发展的信息化时代,人类大概有80%的信息来自图像,科学研究、技术应用中图像处理技术越来越成为不可缺少的手段。安防行业已经进入一个崭新的时代,高清、智能与大数据和云技术的广泛结合应用,成为时代新的话题。随着而来的是,视频图像处理技术也逐渐成熟起来,只有这样才能切合行业技术发展,为此,对于视频…

  • 整除计算器_0 整除

    整除计算器_0 整除原题链接这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。 现在,你的程序要读入一个整数x,这个整数一定是奇数并且不以5结尾。然后,经过计算,输出两个数字:第一个数字s,表示x乘以s是一个光棍,第二个数字n是这个光棍的位数。这样的解当然不是唯一的,题目要求你输出最小的解。提示:一个显然的办法是逐渐增加光棍的位数,直到可以整除x为止。但难点在于,s可能是个非常大的数 ——

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号