YuFeng

SQL事务
mysql的事务 默认的事务:一条sql语句就是一个事务 默认就开启事务并提交事务 手动事务: 1)显示的开启一个...
扫描右侧二维码阅读全文
21
2019/06

SQL事务

mysql的事务
默认的事务:一条sql语句就是一个事务 默认就开启事务并提交事务
手动事务:
1)显示的开启一个事务:start transaction
2)事务提交:commit代表从开启事务到事务提交 中间的所有的sql都认为有效       真正的更新数据库
3)事务的回滚:rollback 代表事务的回滚 从开启事务到事务回滚 中间的所有的   sql操作都认为无效数据库没有被更新

JDBC事务操作
默认是自动事务:
执行sql语句:executeUpdate()  ---- 每执行一次executeUpdate方法 代表 事务自动提交
通过jdbc的API手动事务:
开启事务:conn.setAutoComnmit(false);
提交事务:conn.commit();
回滚事务:conn.rollback();
注意:控制事务的connnection必须是同一个
执行sql的connection与开启事务的connnection必须是同一个才能对事务进行控制
 

package cn.blog.transaction.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCtransaction {
    public static void main(String[] args) {
        try {
            //加载JDBC驱动
            Class.forName("com.mysql.jdbc.Driver");
            //通过JDBC驱动获得数据库的链接
            Connection connection = DriverManager.getConnection("jdbc:mysql:///test", "root", "root");
            //设置是否是自动提交事务,这句代码是设置不自动提交,手动提交事务
            connection.setAutoCommit(false);
            //SQL语句
            String sql = "insert into user values('*******','*******','*******','*******',*******)";
            //获得数据传输平台
            Statement createStatement = connection.createStatement();
            //发送数据,并且用一个int型数据进行接受,这样来检测SQL代码和执行代码是否正确
            int num = createStatement.executeUpdate(sql);
            //执行事务的提交,也可以进行事务回滚:connection.rollback();
            connection.commit();
            System.out.println(num);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


DBUtils事务操作
QueryRunner
有参构造:QueryRunner runner = new QueryRunner(DataSource dataSource);
有参构造将数据源(连接池)作为参数传入QueryRunner,QueryRunner会从连   接池中获得一个数据库连接资源操作数据库,所以直接使用无Connection参数   的update方法即可操作数据库
 
 
 
无参构造:QueryRunner runner = new QueryRunner();
无参的构造没有将数据源(连接池)作为参数传入QueryRunner,那么我们在使  用QueryRunner对象操作数据库时要使用有Connection参数的方法

package cn.blog.transaction.db;

import java.sql.Connection;
import java.sql.SQLException;

import org.apache.commons.dbutils.QueryRunner;

import cn.blog.transaction.utils.CP30Utils;

public class DBtransaction {
    public static void main(String[] args) {
        try {
            QueryRunner qr = new QueryRunner();
            String sql = "insert into user values('*******','*******','*******','*******',*******)";
            Connection conn = CP30Utils.getConnection();
            //只有通过无参的DBUtils创建核心驱动器,才可以使用事务
            conn.setAutoCommit(true);
            int update = qr.update(conn, sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
Last modification:June 21st, 2019 at 07:24 am
If you think my article is useful to you, please feel free to appreciate

Leave a Comment