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

}

代码出错:

 

执行操作后

 

 

posted @ 2018-04-18 21:23  Cappuccinom  阅读(208)  评论(0编辑  收藏  举报