前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JDBC-事务

JDBC-事务

作者头像
cherishspring
发布2019-10-14 16:52:36
4200
发布2019-10-14 16:52:36
举报
文章被收录于专栏:Java学习笔记Java学习笔记

1,概念

  • 一组要么同时执行成功,要么同时执行失败的SQL语句,是数据库操作的一个执行单元!
  • 事务开始于 1,连接到数据库上,并执行一条DML语句(INSERT,UPDATE,或DELETE) 2,前一个事务结束后,有输入了另外一条DML语句
  • 事务结束于 1,执行COMMIT或ROLLBACK语句 2,执行一条DDL语句。如:create table语句;这种情况下会自动执行commit语句。 3,执行一条DCL语句。如:grant语句;在这种情况下会执行commit语句。 4,断开与数据库的连接。 5,执行了一条DML语句,该语句却失败了;这种情况下,会认为这个无效的DML语句执行ROLLBACK语句。

2,事务的特性(ACID)

  • atomicity(原子性)。表示一个事务内的所有操作是一个整体,要么全部成功,要么全部失败。
  • consistency(一致性)。表示事务内有一个操作失败时,所有的更改过的数据必须回滚到修改前的状态。
  • isolation(隔离性)。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。
  • durability(持久性)。持久性事务完成之后,它对于系统的影响是永久性的。

3,事务隔离级别从低到高

  • 读取未提交
  • 读取已提交(默认这个)
  • 可重复读
  • 序列化
代码语言:javascript
复制
public class demoe {
	public static void main(String[] args) {
		Connection conn =null;
		PreparedStatement ps=null;
		PreparedStatement ps1=null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8","root","zzj234812");
			
			conn.setAutoCommit(false);//JDBC中默认自动提交事务
			
			ps=conn.prepareStatement("insert into stu_table (name,pwd) values(?,?)");
			ps.setObject(1, "张三丰");
			ps.setObject(2,"8888");
			ps.execute();
			System.out.println("插入一个用户,张三丰");
			
			try {
				Thread.sleep(6000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			ps1=conn.prepareStatement("insert into stu_table (name,pwd) values(?,?)");
			//ps1=conn.prepareStatement("insert into stu_table (name,pwd) values(?,?,?)");
			ps1.setObject(1, "与代言");
			ps1.setObject(2,"8888");
			ps1.execute();
			System.out.println("插入一个用户,与代言");
			
			conn.commit();//提交
		} catch (ClassNotFoundException e){
			e.printStackTrace();
			try {
				conn.rollback();//回滚
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} 
	}
}

执行结果如下:

插入一个用户,张三丰 插入一个用户,与代言

当我们换上这条语句时

代码语言:javascript
复制
ps1=conn.prepareStatement("insert into stu_table (name,pwd) values(?,?,?)");

结果只显示第一条语句执行成功,那么我们看数据库并没有数据,说明这两条SQL语句在同一个事务中,要么同时成功,要么同时失败。回滚到第一条SQL语句执行之前的状态

image.png
image.png
image.png
image.png
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019 年 09 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1,概念
  • 2,事务的特性(ACID)
  • 3,事务隔离级别从低到高
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档