• JDBC--事务性


    1. 成功操作的示例

    执行操作前

    package com.machuang.jdbc;
    
    /**
     * 测试 事务性
     */
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    
    public class Demo06 {
    
        public static void main(String[] args) {
            
            Connection conn = null;
            PreparedStatement ps1 = null;
            PreparedStatement ps2 = null;
            try {
                // 加载mysql驱动
                Class.forName("com.mysql.jdbc.Driver");
                // 连接数据库
                conn = DriverManager.getConnection(
                                    "jdbc:mysql://localhost:3306/testjdbc","root","333666");
                
                // ps1 和 ps2 在一个提交之间,所以时一个事务
                conn.setAutoCommit(false);    // 设置事务手动提交
                
                ps1 = conn.prepareStatement("insert into t_usr (usrName, pwd) value(?, ?)");
                ps1.setObject(1, "小明");
                ps1.setObject(2, "646468");
                ps1.execute();
                System.out.println("插入一条记录,小明");
                
                try {
                    Thread.sleep(500);        // 线程休眠 500ms
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                
                ps2 = conn.prepareStatement("insert into t_usr (usrName, pwd) value(?, ?)");
                ps2.setObject(1, "小红");
                ps2.setObject(2, "35884");
                ps2.execute();
                System.out.println("插入一条记录,小红");
                
                conn.commit(); // 提交进行执行
                
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
                
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {        
                
                try {
                    if(null != ps2) {
                        ps2.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                
                try {
                    if(null != ps1) {
                        ps1.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                
                try {
                    if(null != conn) {
                        conn.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }        
            }
            
            
            
        }
    
    }

     执行操作后

    1. 失败操作的示例

    执行操作前

    package com.machuang.jdbc;
    
    /**
     * 测试 事务性
     */
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    
    public class Demo06 {
    
        public static void main(String[] args) {
            
            Connection conn = null;
            PreparedStatement ps1 = null;
            PreparedStatement ps2 = null;
            try {
                // 加载mysql驱动
                Class.forName("com.mysql.jdbc.Driver");
                // 连接数据库
                conn = DriverManager.getConnection(
                                    "jdbc:mysql://localhost:3306/testjdbc","root","333666");
                
                // ps1 和 ps2 在一个提交之间,所以时一个事务
                conn.setAutoCommit(false);    // 设置事务手动提交
                
                ps1 = conn.prepareStatement("insert into t_usr (usrName, pwd) value(?, ?)");
                ps1.setObject(1, "小明");
                ps1.setObject(2, "646468");
                ps1.execute();
                System.out.println("插入一条记录,小明");
                
                try {
                    Thread.sleep(500);        // 线程休眠 500ms
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                
                ps2 = conn.prepareStatement("insert into t_usr (usrName, pwd) value(?, ?, ?)");    // 该处出错
                ps2.setObject(1, "小红");
                ps2.setObject(2, "35884");
                ps2.execute();
                System.out.println("插入一条记录,小红");
                
                conn.commit(); // 提交进行执行
                
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
                
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {        
                
                try {
                    if(null != ps2) {
                        ps2.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                
                try {
                    if(null != ps1) {
                        ps1.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                
                try {
                    if(null != conn) {
                        conn.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }        
            }
            
            
            
        }
    
    }

    代码出错:

    执行操作后

     

  • 相关阅读:
    ajax traditional
    阿里云OSS NET SDK 引用示范程序
    js对象的两种写法
    BZOJ NOIP提高组十连测第一场
    ikbc 时光机 F87 Ctrl 失灵 解决办法
    【读书笔记】阅读的危险
    51nod 1118 机器人走方格 解题思路:动态规划 & 1119 机器人走方格 V2 解题思路:根据杨辉三角转化问题为组合数和求逆元问题
    【算法】求逆元模板
    【复习资料】软件工程之快速原型模型
    VirtualBox安装linux mint教程
  • 原文地址:https://www.cnblogs.com/cappuccinom/p/8877673.html
Copyright © 2020-2023  润新知