• 17.12 事务处理(血干JAVA系类)


    在这里插入图片描述

    17.12.1 MySQL对事务的支持

    在这里插入图片描述
    在这里插入图片描述

    17.12.2 执行JDBC的事务处理

    【例17.28]没有使用事务处理

    package file;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.text.SimpleDateFormat;
    
    public class demo 
    {
    	public static final String DBDRIVER = "com.mysql.cj.jdbc.Driver";
    	public static final String DBURL = "jdbc:mysql://localhost:3306/java_mysql";
    	public static final String DBUSER = "root";
    	public static final String DBPASS = "dyh20011022";
    	
    	public static void main(String[] args) throws Exception
    	{		
    		Class.forName(DBDRIVER);//驱动
    		//注意sql语句:select
    		String sql = "insert into user(name,password,age,sex,birthday) values('赵胡金','password_fair',30,'男','2020-10-25')";
    		
    		Connection conn =DriverManager.getConnection(DBURL, DBUSER, DBPASS);
    		PreparedStatement pstmt = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 
    		pstmt.addBatch("insert into user(name,password,age,sex,birthday) values('赵胡金1','password_fair',30,'男','2020-10-25')");
    		pstmt.addBatch("insert into user(name,password,age,sex,birthday) values('赵胡金2','password_fair',30,'男','2020-10-25')");
    		//cuo wu
    		pstmt.addBatch("insert into user(name,password,age,sex,birthday) values(''赵胡金3','password_fair',30,'男','2020-10-25')");
    		
    		pstmt.addBatch("insert into user(name,password,age,sex,birthday) values('赵胡金4','password_fair',30,'男','2020-10-25')");
    		pstmt.addBatch("insert into user(name,password,age,sex,birthday) values('赵胡金5','password_fair',30,'男','2020-10-25')");
    		int temp[] = pstmt.executeBatch();
    		System.out.println("执行了"+temp.length+"条语句。");
    		
    		//关闭
    		pstmt.close();
    		conn.close();
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    在这里插入图片描述
    没有3
    在这里插入图片描述

    【例17.29】事务基本操作

    conn.setAutoCommit(false);
    int temp[] = pstmt.executeBatch();
    conn.commit();//提交
    conn.rollback();
    
    • 1
    • 2
    • 3
    • 4
    package file;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.text.SimpleDateFormat;
    
    public class demo 
    {
    	public static final String DBDRIVER = "com.mysql.cj.jdbc.Driver";
    	public static final String DBURL = "jdbc:mysql://localhost:3306/java_mysql";
    	public static final String DBUSER = "root";
    	public static final String DBPASS = "dyh20011022";
    	
    	public static void main(String[] args) throws Exception
    	{		
    		Class.forName(DBDRIVER);//驱动
    		//注意sql语句:select
    		String sql = "insert into user(name,password,age,sex,birthday) values('赵胡金','password_fair',30,'男','2020-10-25')";
    		
    		Connection conn =DriverManager.getConnection(DBURL, DBUSER, DBPASS);
    		PreparedStatement pstmt = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 
    		conn.setAutoCommit(false);
    		
    		
    		pstmt.addBatch("insert into user(name,password,age,sex,birthday) values('赵1','password_fair',30,'男','2020-10-25')");
    		pstmt.addBatch("insert into user(name,password,age,sex,birthday) values('赵2','password_fair',30,'男','2020-10-25')");
    		//cuo wu
    		pstmt.addBatch("insert into user(name,password,age,sex,birthday) values(''赵3','password_fair',30,'男','2020-10-25')");
    		
    		pstmt.addBatch("insert into user(name,password,age,sex,birthday) values('赵4','password_fair',30,'男','2020-10-25')");
    		pstmt.addBatch("insert into user(name,password,age,sex,birthday) values('赵5','password_fair',30,'男','2020-10-25')");
    		
    		try 
    		{
    			int temp[] = pstmt.executeBatch();
    			System.out.println("执行了"+temp.length+"条语句。");
    			conn.commit();//提交
    		}
    		catch (Exception e) 
    		{
    			try 
    			{
    				conn.rollback();
    			}
    			catch (Exception e2) 
    			{
    				e2.printStackTrace();
    			}
    		}
    		
    		//关闭
    		pstmt.close();
    		conn.close();
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    在这里插入图片描述
    无变化,回滚了
    在这里插入图片描述
    面的程序中加入了事务的处理操作,这样当更新出错后,数据库会进行回滚,则所有的更新操作全部失效,如图17-49所示。
    当然,也可以加入若干的Savepoint作为事务的保存点

    【例 17.30]加入 Savepoint

    conn.setAutoCommit(false);
    pstmt.executeUpdate("insert into user(name,password,age,sex,birthday) values('赵1','password_fair',30,'男','2020-10-25')");
    Savepoint sp = conn.setSavepoint();
    
    conn.rollback(sp);//回滚
    conn.commit();//提交
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    package file;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.Savepoint;
    import java.text.SimpleDateFormat;
    
    public class demo 
    {
    	public static final String DBDRIVER = "com.mysql.cj.jdbc.Driver";
    	public static final String DBURL = "jdbc:mysql://localhost:3306/java_mysql";
    	public static final String DBUSER = "root";
    	public static final String DBPASS = "dyh20011022";
    	
    	public static void main(String[] args) throws Exception
    	{		
    		Class.forName(DBDRIVER);//驱动
    		//注意sql语句:select
    		String sql = "insert into user(name,password,age,sex,birthday) values('赵胡金','password_fair',30,'男','2020-10-25')";
    		
    		Connection conn =DriverManager.getConnection(DBURL, DBUSER, DBPASS);
    		PreparedStatement pstmt = conn.prepareStatement(sql); 
    		conn.setAutoCommit(false);
    		
    		
    		pstmt.executeUpdate("insert into user(name,password,age,sex,birthday) values('赵1','password_fair',30,'男','2020-10-25')");
    		pstmt.executeUpdate("insert into user(name,password,age,sex,birthday) values('赵2','password_fair',30,'男','2020-10-25')");
    		pstmt.executeUpdate("insert into user(name,password,age,sex,birthday) values('赵3','password_fair',30,'男','2020-10-25')");
    
    		Savepoint sp = conn.setSavepoint();
    
    		pstmt.executeUpdate("insert into user(name,password,age,sex,birthday) values('赵4','password_fair',30,'男','2020-10-25')");
    		pstmt.executeUpdate("insert into user(name,password,age,sex,birthday) values('赵5','password_fair',30,'男','2020-10-25')");
    		
    		try 
    		{
    			conn.rollback(sp);//回滚
    			conn.commit();//提交
    		}
    		catch (Exception e) 
    		{
    			e.printStackTrace();
    		}
    		
    		//关闭
    		pstmt.close();
    		conn.close();
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    亚马逊测评术语有哪些?
    【Apollo学习笔记】——规划模块TASK之PIECEWISE_JERK_SPEED_OPTIMIZER
    一个ES设置操作引发的“血案”
    【剑指Offer】28.对称的二叉树
    输入的这些数是否对称
    PyG MessagePassing机制源码分析
    kafka安装部署详解
    前端基础面试题 简单复杂数据类型检测转换、阶乘、绝对值、圣诞...
    Java | 异常类【万字详解,看过来】
    新生儿弱视:原因、科普和注意事项
  • 原文地址:https://blog.csdn.net/qq_52384627/article/details/125477692