PreperdStatement Transaction(事务)简单操作数据库

配置:JDBCUtilsjdbc.properties

 PreperdStatementUpdateTransactionTest简单测试

package JDBCPreparedStatement;

import JDBCUtil.JDBCUtils;
import jdk.nashorn.internal.scripts.JD;
import org.junit.Test;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * @Author HLY
 * @Create 2019-12-19 10:54
 */
public class PreperdStatementUpdateTransactionTest {

    /**
     * 建表逻辑,此表某些字段没有建,请自行补全
     */
    public void creatTable(){
        String sql="CREATE TABLE user(\n" +
                "id INTEGER(10) NOT NULL PRIMARY KEY auto_increment ,\n" +
                "name VARCHAR(22) NOT NULL,\n" +
                "balance INTEGER(10) NOT NULL\n" +
                ")\n";
    }


    /*
    * 普通更新数据
    * */
    public void update(String sql,Object... args){
        Connection connection=null;
        PreparedStatement preparedStatement=null;
        try {
            //1.获取数据库链接
            connection= JDBCUtils.getConnection();
            //2.预编译sql语句,获得preparedStatement实例
            preparedStatement=connection.prepareStatement(sql);
            //3.填充占位符
            for (int i=1;i<=args.length;i++){
                preparedStatement.setObject(i,args[i]);
            }
            //4.执行
            preparedStatement.execute();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                //5.资源关闭
                JDBCUtils.closeResource(connection,preparedStatement,null);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    /*
     * 事务更新数据
     * */
    public void updateTransaction(Connection connection, String sql,Object... args){
        PreparedStatement preparedStatement=null;
        try {
            //1.预编译sql语句,获得preparedStatement实例
            preparedStatement=connection.prepareStatement(sql);
            //2.填充占位符
            for (int i=1;i<=args.length;i++){
                preparedStatement.setObject(i,args[i-1]);
            }
            //3.执行
            preparedStatement.execute();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                //4.资源关闭
                JDBCUtils.closeResource(null,preparedStatement,null);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    @Test
    public void TransactionTest()  {
        Connection connection=null;
        try {
            connection=JDBCUtils.getConnection();
            //取消自动提交
            connection.setAutoCommit(false);
            String sql1="UPDATE user SET balance=balance-1000 WHERE id=?";
            updateTransaction(connection,sql1,1);
            System.out.println(10/0);//模拟异常
            String sql2="UPDATE user SET balance=balance+1000 WHERE id=?";
            updateTransaction(connection,sql2,2);
            System.out.println("转账成功");
            //设置提交数据
            connection.commit();
        } catch (Exception e) {
            e.printStackTrace();
            //出现异常回滚数据
            try {
                connection.rollback();
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        }finally {
            /*
            * 修改其为自动提交
            * 针对于使用数据库链接池的使用
            * */
            try {
                connection.setAutoCommit(true);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                JDBCUtils.closeResource(connection,null,null);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }


    @Test
    public void NOTransactionTest(){
        Connection connection=null;
        try {
            connection=JDBCUtils.getConnection();
            String sql1="UPDATE user SET balance=balance-1000 WHERE id=?";
            updateTransaction(connection,sql1,1);
            System.out.println(10/0);//模拟异常
            String sql2="UPDATE user SET balance=balance+1000 WHERE id=?";
            updateTransaction(connection,sql2,2);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                JDBCUtils.closeResource(connection,null,null);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

User对象

package JDBCPreparedStatement;

import java.util.Date;

/**
 * @Author HLY
 * @Create 2019-12-17 16:58
 */
public class User {

    public int id;
    public String name ;
    public Date birth ;
    public String email;
    public int balance;

    public User(){}

    public User(int id,String name,Date birth,String email,int balance){
        this.id=id;
        this.name=name;
        this.birth=birth;
        this.email=email;
        this.balance=balance;
    }


    public void setId(int id){
        this.id=id;
    }
    public int getId(){
        return this.id;
    }

    public void setname(String name){
        this.name=name;
    }
    public String getname(){
        return this.name;
    }

    public void setemail(String email){
        this.email=email;
    }
    public String getemail(){
        return this.email;
    }

    public void setbirth(Date birth){
        this.birth=birth;
    }
    public Date getbirth(){
        return this.birth;
    }

    public void setbalance(int balance){
        this.balance=balance;
    }
    public int getbalance(){
        return this.balance;
    }

    @Override
    public String toString() {
        return "User{id="+id+",name="+
                name+",birth="+
                birth+",email="+
                email+",balance="+
                balance+"}";
    }
}

猜你喜欢

转载自blog.csdn.net/paroleg/article/details/103614202