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();
                }        
            }
            
            
            
        }
    
    }

    代码出错:

    执行操作后

     

  • 相关阅读:
    前导零的操作
    反射已有的对象
    下面给出一个$.ajax()方法实现异步请求的例子
    JQuery 异步请求
    用户控件生成代码
    MasterPage(母板页)的不一般用法
    ajax异步请求的ashx页面
    最简单的服务端
    JavaScript 数字的千分位 和去除 小数部分
    数据库表的复制
  • 原文地址:https://www.cnblogs.com/cappuccinom/p/8877673.html
Copyright © 2011-2022 走看看