zoukankan      html  css  js  c++  java
  • 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();
                }        
            }
            
            
            
        }
    
    }

    代码出错:

    执行操作后

     

  • 相关阅读:
    梯度提升树算法GBDT
    优先队列 priority_queue
    谭平 Vision Course Note 1~2 Recommended Textbook and Camera Basics
    侯捷老师C++基础课程笔记7-栈、堆和内存管理
    侯捷老师C++基础课程笔记6-三大特殊函数
    侯捷老师C++基础课程笔记5-操作符重载与临时对象
    侯捷老师C++基础课程笔记4-参数传递与返回值
    侯捷老师C++基础课程笔记3-构造函数(不含指针变量的class)
    侯捷老师C++基础课程笔记1-2
    C文件处理之24/32位bmp图像的旋转
  • 原文地址:https://www.cnblogs.com/cappuccinom/p/8877673.html
Copyright © 2011-2022 走看看