26、JDBC对事务的支持

本文讲解了JDBC中事务的基本概念及使用方法,包括如何通过setAutoCommit(false)关闭自动提交,使用commit()提交数据和con.rollback()进行回滚。并通过一个实例演示了如何在批量插入数据时使用事务确保数据的一致性。

学习目标:

1、巩固事务的知识

2、JDBC对事务的支持和语法使用

学习过程:

一、jdbc中使用事务

我们先回顾一下什么是事务,事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作,这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行。事务是一个不可分割的工作逻辑单元 

那么在jdbc中如何可以实现是事务呢?我们平时使用jdbc时,并不需要显示的提交数据,因为jdbc会自动的在executeUpdate时执行提交,所以我们要在jdbc中使用事务,那么需要修改这个默认自动提交功能。

setAutoCommit(false);

常用的方法就是提交数据和回滚了

commit();

con.rollback();

二、举例说明

我们举一个简单的例子,添加多个用户,这里要求所有的用户都必须一次性添加,要么都成功添加,要么都添加失败,所以我们需要使用事务进行控制。

实现代码如下:

public void addUsers(List<User> users) {
    String sql = "insert into tb_user(user_name,user_pass) values(?,?)";
    try {
        getCon();
        //自动提交功能关闭
        connection.setAutoCommit(false);
        for (User user : users) {
            preExe(sql,new Object[] { user.getUserName(), user.getUserPass() });
            preparedStatement.executeUpdate();
        }
        //手动提交
        connection.commit();
    } catch (Exception e) {
        try {
            connection.rollback();//回滚
         } catch (SQLException e1) {
            // TODO Auto-generated catch block
             e1.printStackTrace();
        }
        e.printStackTrace();
    } finally {
        closeAll();
    }

}

然后你可以测试一下,为了更方便测试,我们把用户名的长度改为varchar(10),这样长度超过10的就会插入失败

public static void main(String[] args) {

        UserDao userDao = new UserDao();
        List<User> users=new ArrayList<User>();

        User user1=new User();
        user1.setUserName("bao01");
        user1.setUserPass("123");
        users.add(user1);

        //插入失败的语句

        User usertt=new User();
        usertt.setUserName("bao000000000000000000000000000000000000000000a");
        usertt.setUserPass("asdasdfas");
        users.add(usertt);


        User user2=new User();
        user2.setUserName("bao02");
        user2.setUserPass("2222");
        users.add(user2);

        userDao.addUsers(users);

    }

三、保存点(SavePoint)

JDBC也可以定义SavePoint接口,提供在一个更细粒度的事务控制机制。当设置了一个保存点后,可以rollback到该保存点处的状态,而不是rollback整个事务。Connection接口的setSavepoint和releaseSavepoint方法可以设置和释放保存点。大家可以自己上机尝试。

最后JDBC规范虽然定义了事务的以上支持行为,但是各个JDBC驱动,数据库厂商对事务的支持程度可能各不相同。如果在程序中任意设置,可能得不到想要的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值