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元,然而,银行账户上的钱没变化,那就糟糕了。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • WordPress 插件漏洞被利用,近 20 万站点还没打补丁[通俗易懂]

    WordPress 插件漏洞被利用,近 20 万站点还没打补丁[通俗易懂]WordPress 插件漏洞被利用,近 20 万站点还没打补丁

    2022年4月21日
    235
  • 服务器查看外网IP地址和方法

    服务器查看外网IP地址和方法返回IP地址curlip.6655.com/ip.aspxcurlwhatismyip.akamai.comwget-qO-ifconfig.cocurlicanhazip.comdig+shortmyip.opendns.com@resolver1.opendns.comcurlident.mecurlv4.ident.mecurlcu…

    2022年5月30日
    52
  • matlab三维图怎么改变颜色_matlab画复杂函数图像

    matlab三维图怎么改变颜色_matlab画复杂函数图像当我们学习surface命令时,已经看到了三维作图的一些端倪。在matlab中我么可以调用mesh(x,y,z)函数来产生三维图像。首先,我们用z=cos(x)sin(y)在-2pi≤x,y≤2pi内的图像来看看:[x,y]=meshgrid(-2*pi:0.1:2*pi);z=cos(x).*sin(y);mesh(x,y,z),xlabel(‘x’),ylabel(‘y’),zla…

    2022年8月31日
    3
  • 【FPGA——工具篇】:Modelsim SE-64 10.4下载、破解、安装过程

    【FPGA——工具篇】:Modelsim SE-64 10.4下载、破解、安装过程ModelsimSE-6410.4破解安装过程百度云链接:https://pan.baidu.com/s/1ONbjNLajFKzHDJ9bs4gz6Q密码:by0p压缩包解压密码:Lily_9 ①执行软件的正常安装程序.exe,点点我同意神马的….(需要重启一次)②在软件安装目录中找到mgls64.dll文件,右键文件属性取消只读属性。mgls64.dll文件的默认路径…

    2022年5月23日
    38
  • 电脑显示与域服务器失去信任,此工作站和主域间的信任关系失败,退出域后也不能重新加入…

    电脑显示与域服务器失去信任,此工作站和主域间的信任关系失败,退出域后也不能重新加入…谢谢前面的回答,但觉得只是提供了分析问题的思路!我用问题的英文翻译“Thetrustrelationshipbetweenthisworkstationandtheprimarydomainfailed”进行搜索发现以下这样一篇博文,按照其方法操作已经成功解决问题。基本原理就是通过命令重建服务器与该失信客户端之间联系的密码。具体操作步骤:(前提是没有退出域,或可以系统还原为没…

    2022年10月19日
    0
  • Ubuntu安装python3和pip3

    Ubuntu安装python3和pip31、下载安装包:Python官网下载选择对应的版本下载.tgz文件。2、解压文件,进入文件夹。在终端运行:./configure编译:make测试:maketest安装:sudomakeinstall如果安装出现:make:***[install]Error1不用管。运行:python3.7.33.7.3是我安装的版本,将版本号换成自己的,能进入python环境就说明安装成功了。3、设置为默认的版本python指向python3.7.3。删除原有的链接:sudorm/u

    2022年6月23日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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