JDBC 事务处理【最终版】

事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态。

事务处理(事务操作):保证所有事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式。

当在一个事务中执行多个操作时,要么所有的事务都被提交(commit),那么这些修改就永久地保存下来;要么数据库管理系统将放弃所作的所有修改,整个事务回滚(rollback)到最初状态。

为确保数据库中数据的一致性,数据的操纵应当是离散的成组的逻辑单元:当它全部完成时,数据的一致性可以保持,而当这个单元中的一部分操作失败,整个事务应全部视为错误,所有从起始点以后的操作应全部回退到开始状态。

当一个连接对象被创建时,默认情况下是自动提交事务:每次执行一个 SQL 语句时,如果执行成功,就会向数据库自动提交,而不能回滚

JDBC 事务处理

为了让多个 SQL 语句作为一个事务执行:

  • 调用 Connection 对象的 setAutoCommit(false); 以取消自动提交事务
  • 在所有的 SQL 语句都成功执行后,调用 commit(); 方法提交事务
  • 在出现异常时,调用 rollback(); 方法回滚事务
  • 若此时 Connection 没有被关闭, 则需要恢复其自动提交状态

// AA 用户转给 BB 用户 100元。 1.AA 用户 扣除 100
2.BB用户增加 100

@Test

public void testUpdate2 () {

Connection conn = null ;

try {

conn = JDBCUtils .getConnection ();

// 1. 开启事务

conn .setAutoCommit ( false);

String sql1 = "update
user_table set balance = balance - ? where user = ?";

updateWithTx (conn , sql1 , 100 , "AA");

// 模拟网络异常

// System.out.println(10 / 0);

String sql2 = "update
user_table set balance = balance + ? where user = ?";

updateWithTx (conn , sql2 , 100 , "BB");

// 2. 提交事务

conn .commit ();

} catch (Exception
) {

.printStackTrace ();

if (conn != null ) {

try {

// 3. 回滚事务

conn .rollback (); //出现异常则直接会执行 catch 中的内容,然后使之前对数据库的操作回滚

} catch (SQLException
e1 ) {

e1 .printStackTrace ();

}

}

} finally {

JDBCUtils .close ( null, null, conn);

}

}

// 通用的增删改方法( version
3.0 ): 考虑上数据库事务

public void updateWithTx (Connection
conn , String sql , Object... args) {

// 1. 返回一个PreparedStatement 的对象,涉及预编译 sql 语句

PreparedStatement ps = null ;

try {

ps = conn .prepareStatement (sql );

// 2. 填充占位符

for ( int i = 0; i < args .length ; i ++) {

ps .setObject (+ 1 , args []);// 设置占位符

}

// 3. 执行

ps .executeUpdate ();

} catch (Exception
) {

.printStackTrace ();

} finally {

// 4. 关闭操作

JDBCUtils .close ( null, ps , null); // 注意连接不能关,否则会有语句执行不到

}

}

时间: 2024-08-26 10:47:34

JDBC 事务处理【最终版】的相关文章

jQuery 3.0最终版发布,十大新特性眼前一亮

jQuery 3.0在日前发布了最终的全新版本.从2014年10月,jQuery团队对这个主要大版本进行维护开始,web开发者社区便一直在期待着这一刻的到来,终于在2016年6月他们迎来了这一个最终版www.lampbrother.net. 通过jQuery 3.0的版本更新说明,我们看到了一个保持着向后兼容的更轻便,更快速的jQuery.在本文中,我们将介绍一些令人眼前一亮的jQuery 3.0全新特性. 开始前的说明 如果你想要下载jQuery 3.0进行亲自实验,可以通过该页面进行下载.另

最终版的Web(Python实现)

天啦,要考试了,要期末考试了,今天把最终版的Python搭建Web代码先写这里记下了.详细的过程先不写了. 这次是在前面的基础上重写 HTTPServer 与 BaseHTTPRequestHandler,主要利用 python 提供 的 socket 进行编程,从而实现消息的接收与相应:然后再接着引入多线程,分别处理来自客户端的请求:最后实现根据客户端传递的参数动态生成页面的功能. 主要步骤如下: 一. .重写 HTTPServer 与 BaseHTTPRequestHandlerPython

MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类

首先需要回顾一下上一篇文章中的内容:MySQL数据库学习笔记(九)----JDBC的PreparedStatement接口重构增删改查 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit.Rollback命令进行事务的提交与回滚.实际上在JDBC中也存在事务处理,如果要想进行事务处理的话,则必须按照以下的步骤完成. JDBC中事务处理的步骤: 1.要取消掉JDBC的自动提交:void setAutoCommit(boolea

结对项目--四则运算图形化最终版

四则运算器图形化最终版 (然而被我做成了奇怪的东西 组员:13070030张博文 13070033刘云峰 一.概念阶段 最初是想试试用android做个计算器app,无奈从零学起着实太赶,而且这个计划在试用了无比卡顿占内存的android studio后就彻底搁浅了. 然后就被路人谣传说MFC好用,无奈从零学起着实太赶,而且这个计划在无人指导的摸黑下也顺手搁浅了. 最终便沦为了EasyX旧传统,好歹有点基础,但果然还是不太甘心. 以及因为当初想做app,所以抠了iphone计算器的图想当UI,结

理解《JavaScript设计模式与开发应用》发布-订阅模式的最终版代码

最近拜读了曾探所著的<JavaScript设计模式与开发应用>一书,在读到发布-订阅模式一章时,作者不仅给出了基本模式的通用版本的发布-订阅模式的代码,最后还做出了扩展,给该模式增加了离线空间功能和命名空间功能,以达到先发布再订阅的功能和防止名称冲突的效果.但是令人感到遗憾的是最终代码并没有给出足够的注释.这让像我一样的小白就感到非常的困惑,于是我将这份最终代码仔细研究了一下,并给出了自己的一些理解,鉴于能力有限,文中观点可能并不完全正确,望看到的大大们不吝赐教,谢谢! 下面是添加了个人注释的

成为C++高手之最终版计算器

下面做我们的计算器最终版. 当前还存在的问题是用户只能算一次.如果有人买一个一次性计算器,那么他肯定是个土豪.我们的计算器不能只给土豪用,所以要改成可以反复使用的. 使用循环语句就可以了,但是循环哪些代码呢?从用户输入到打印出结果这个过程要反复执行,代码如是: enum OPT{ jia = 1, jian, cheng, chu }; int main(void) { //保存用户输入的数 int number1; int number2; int opt;//运算符 //循环从输入到输出结果

20172333 2017-2018-2 《程序设计与数据结构》实验2报告(最终版)

20172333 2017-2018-2 <程序设计与数据结构>实验2报告(最终版) 1.结对成员 李楠20172330 领航员:李楠 驾驶员:严域俊 成绩分配:五五开 2.相关测试过程及截图 [x] 完整一套流程截图(创建题目,中缀转后缀,计算后缀,对比答案,答案正确个数.) [x] 分数测试类单独测试截图 [x] 整数测试类单独测试截图 [x] 中缀转后缀单独测试截图 3.测试中遇到的问题及解决办法 这周主要问题所在:由于在最后计算测试类编写的时候运用的方法来自几个类的合并,导致了在输出答

25岁,我习得了自愈近视的魔法-最终版(填坑版)

转自:http://blog.sina.com.cn/s/blog_624791ed0100ftp9.html#comment4 距离上次发帖差不多有2个月了,之前的帖子差了很多东西,很糙,特别是没和所发资料有所关联.而且那段时间我比较忙.压力也比较大,没时间去整理自己的想法.而且所发书上所述不是完全正确的,特别是台湾和日本的那两本,没什么理论根据.近几天我把这些书又翻了一遍,决定按照毕业论文的格式再写一遍,也算是对上次不怎么负责任的发帖的补偿吧.感谢S1er的支持,不废话了. 简述 简述一下整

JDBC:事务处理

事务 数据库事务是指由一个或者多个SQL语句组成的工作单元,这个工作单元中的SQL语句是相互依赖的,简单点说,即一个SQL语句如果出现了一个错误,那么这一整个工作单元都将会被撤销掉. 事务的四大特性: Atomic(原子性):事务中包含的操作被看作一个逻辑单元,这个逻辑单元中的操作要么全部成功,要么全部失败. Consistency(一致性):只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初状态. Isolation(隔离性):事务允许多个用户对同一个数据的并发访问,而不破坏数据的正确