JDBC对事务的使用(包括自动提交,回滚等知识)

首先得清楚什么时候使用事务。
当你需要一次执行多条SQL语句时,可以使用事务。通俗一点说,就是,如果这几条SQL语句全部执行成功,则才对数据库进行一次更新,如果有一条SQL语句执行失败,则这几条SQL语句全部不进行执行,这个时候需要用到事务。
其次才是事务的具体使用。
1.获取对数据库的连接(代码这里省略了吧,网上太多了,对各种数据库的连接的都有)
2.设置事务不自动提交(默认情况是自动提交的)  conn.setAutoCommit(false); //其中conn是第一步获取的随数据库的连接对象。

3.把想要一次性提交的几个sql语句用事务进行提交

1Statement stmt = null; 2 stmt = conn.createStatement(); 3 stmt.executeUpdate(sql1); 4 stmt.executeUpdate(Sql2); 5 conn.commit(); //使用commit提交事务

4.捕获异常,进行数据的回滚(回滚一般写在catch块中)

1catch(Exception e) 2 { 3 ... 4 try 5 { 6 conn.rollback(); 7 } catch(Exception e) 8 {...} 9 }

5.把事务再改成自动提交(默认状态)

conn.setAutoCommit(true);

解答各种疑问
1.回滚的目的是什么呢?
目的是使得sql1,sql2。。。等操作要么全部执行成功,要么全部执行不成功,这也是为什     么把这几个sql语句当成一个事务来处理的目的。
2.回滚从哪里开始回滚,我如何控制回滚的起始点。

其实是可以设置存储点的

1Savepoint piont = conn.setSavepoint(); 2 conn.rollback(point);

如果你没有设置存储点,他会回滚到你设置禁止事务自动提交的时候,因为你是先设置禁止自动提交的,再进行executeUpdate(sql)的,所以他会回滚到你的所有执行的这几个sql语句前的状态。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

golang实现MySQL数据库事物的提交与回滚

MySQL事务主要用于处理操作量大,复杂度高的数据。在MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务。事务用来管理insert,update,delete语句,事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行。一般来说,事务是必须满足4个条件(ACID)::原子性(Atomicit

Python3:sqlalchemy对mysql数据库操作,非sql语句

Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''

MySQL transaction

MySQLtransaction(数据库的事务)数据库事务(DatabaseTransaction),是指作为单个逻辑工作单元执行的一系列操作。要么完全执行,要么完全地不执行。ACID事务必须具备ACID四个特性原子性(Atomicity)原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。一致性(Consistency)

JDBC对事务的使用(包括自动提交,回滚等知识) - HelloWorld