JDBC事务

本文介绍了JDBC事务的基本概念,包括事务的定义、四大属性:原子性、一致性、隔离性和持久性,并通过银行转账的例子进行阐述。同时,讲解了在JDBC中如何实现事务控制,包括关闭自动提交、捕获异常以及提交或回滚事务的步骤。
摘要由CSDN通过智能技术生成

JDBC是什么?

        JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。(以上内容来自百度百科)。简单说,JDBC是一个Java API,通过其定义的类和接口你可以使用SQL语句操作支持SQL语句的数据库。

JDBC事务是什么?

        关于JDBC事务的概念我也疑惑可好久。先来看看我网上找到的一些解释:①事务(Transaction):是并发控制的单元,是用户定义的一个操作序列。并发控制单元????什么是控制单元,对Java小白这么不友好,差评;②事务是指一组最小逻辑操作单元,里面有多个操作组成。恩有点意思,事务是最小逻辑操作单元,这个单元里有好多操作。③事务是一步或多步组成操作序列组成的逻辑执行单元。恩有点意思了。事务是由很多部操作或者一步操作组成的一个操作组合。

        好根据上边的知识,我用我自己的理解解释一下:你想让数据库执行一个任务,而这个任务至少要N步(N>=1)操作才能完成,这N步操作组合在一起就叫做事务。

        举个例子:你现在是公司数据库管理者,公司有位员工离职啦,你现在需要在公司数据库里删除这个员工的信息,这就是你需要数据库执行的任务。而删除这位员工的信息你需要删除他的基本资料,还有他在公司的信箱和其他信息。而你删除这每一种信息所做的操作组合起来就是事务。再来一个。某一个人A从他的账户里转出一笔钱给B,此时数据库的任务就是完成这笔转账操作。完成这个任务需要把A账户上的钱数目减少,给B账户数目增加,这写操作组合起来就是一个事务。

事务的四大属性

        这时候有人会问我单个单个操作去执行,也可以完成这任务啊,为啥非得组合起来,取名叫事务。恩,这个问题问的好。这个时候就要引出事务的四个属性。(那你以为呢,人家还有属性)。

        原子性:一组事务中的操作要么全部执行,要么一个都不执行。银行转账例子中,要么A账户减少和B账户增加都执行,要么你都不要执行。你要是不小心只执行了一个,那就很成问题啊小朋友!

         一致性:事务完成后,必须所有的数据都保持一致。在银行转账例子中,参与转账的两个账户的余额总和在转账前后是一致的,你想想,是不是这个道理。

        隔离性:事务独立运行,而且是100%独立,两个并发事务不可能同时对同一个数据进行操作。还是以银行转账为例子,这回在增加一个C,A和C同时给B转账,A转100,C转200如果同时操作,B的账户上突然一下子多了300元,那B怎么知道这300是谁转的,谁转了多少,这更麻烦了!

        持久性:事务完成后,对系统的影响是持久的。这个很好理解了,A给B转了钱,那么这笔转账操作永远有效。如果今天有效,明天没效,岂不是很难过。

        所以通过事务,sql server 能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性。这就是为什么要使用事务的原因。

事务机制的代码实现

        JBDC为开发者提供了专门的使用事务的API。默认情况下,JDBC使用自动提交事务的方式,也就是说,一旦SQL语句完成,就提交事务。但是多数情况下,开发者需要控制事务的过程,如果发生了某个异常或者参数出现问题后,能够回滚事务。代码如下:

Connection conn = DriverManager.getConnection("连接URL","用户名","密码");
try {
    conn.setAutoCommit(false);        //关闭自动提交事务
    stme = conn.createStatement();    //创建会话
    stmt.excuteUpdate("执行sql语句");  //执行SQL增删改查命令
    conn.commit();                    //提交事务
} catch(Exception e) {
    e.printStackTrace();
    conn.rollback();                  //回滚事务
} fianlly {
    if(stmt != null)                  //判断会话是否为空
        stmt.close();                 //关闭会话
    if(conn != null)                  //判断连接是否为空
        conn.close();                 //关闭连接
}

        一般来说,JDBC中使用事务服务大致有一下几个步骤:

                (1)关闭自动提交,,设置连接的自动提交事务属性为false;

                (2)捕获(try catch)执行代码。如果执行过程顺利,提交事务,一旦发生异常,回滚(rollback)事务;

                (3)关闭连接。

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值