-  如果JDBC连接处于自动提交模式,默认情况下,则每个SQL语句在完成后都会提交到数据库中。

-  对于简单的应用程序可能没有什么问题,但是有三个原因需要考虑是否关闭自动提交并管理自己的事务:

-  提高性能

-  保持业务流程的完整性

-  使用分布式事务

-  事务能够控制何时更改提交并应用于数据库中。它将单个SQL语句或者一组SQL语句视为一个逻辑单元,如果任何语句失败,整个事务将失败。

-  要启动手动事务支持,而不是使用JDBC驱动程序默认使用的自动提交模式,调用Connection对象的setAutoCommit()方法。如果将布尔的false传递给setAutoCommit(),则关闭自动提交。也可以传递一个布尔值true来重新打开它。


1、提交和回滚

-  完成更改后,若要提交更改,那么可在连接对象上调用commit()方法,如下所示:

conn.commit( );

-  否则,要使用连接名为conn的数据库回滚更新,使用以下代码:

conn.rollback();

-  以下示例说明了如何使用提交和回滚对象:

try{//Assume a valid connection object connconn.setAutoCommit(false);Statement stmt = conn.createStatement();String SQL = "INSERT INTO Employees  " +"VALUES (106, 20, 'Rita', 'Tez')";stmt.executeUpdate(SQL);  //Submit a malformed SQL statement that breaksString SQL = "INSERTED IN Employees  " +"VALUES (107, 22, 'Sita', 'Singh')";stmt.executeUpdate(SQL);// If there is no error.conn.commit();
}catch(SQLException se){// If there is any error.conn.rollback();
}

-  在这种情况下,上述INSERT语句不会成功执行,因为所有操作都被回滚了。


2、使用保存点

-  新的JDBC3.0新添加了Savepoint接口提供了额外的事务控制能力。大多数现代DBMS支持其环境中的保存点,如Oracle的PL/SQL。

-  设置保存点(Savepoint)时,可以在事务中定义逻辑回滚点。如果通过保存点(Savepoint)发生错误时,则可以使用回滚方法来撤销所有更改或者仅保存保存点之后所做的更改。

-  Connection对象有两种新的方法可用来管理保存点:

-  saveSavepoint(String savepointName):定义新的保存点,它还返回了一个Savepoint对象。

-  releaseSavepoint(Savepoint savepointName):删除保存点。要注意,它需要一个Savepoint对象作为参数。该对象通常是由setSavepoint()方法生成的保存点。

-  有一个rollback(String savepointName)方法,它将使用事务回滚到指定的保存点中。

-  以下示例说明了使用Savepoint对象:

try{//Assume a valid connection object connconn.setAutoCommit(false);Statement stmt = conn.createStatement();//set a SavepointSavepoint savepoint1 = conn.setSavepoint("Savepoint1");String SQL = "INSERT INTO Employees " +"VALUES (106, 24, 'Curry', 'Stephen')";stmt.executeUpdate(SQL);  //Submit a malformed SQL statement that breaksString SQL = "INSERTED IN Employees " +"VALUES (107, 32, 'Kobe', 'Bryant')";stmt.executeUpdate(SQL);// If there is no error, commit the changes.conn.commit();}catch(SQLException se){// If there is any error.conn.rollback(savepoint1);
}

-  在这种情况下,上述INSERT语句都不会成功,因为所有操作都被回滚了。

转载于:https://blog.51cto.com/12402717/1980448

JDBC编程专题9之JDBC事务相关推荐

  1. JDBC编程专题4之JDBC驱动程序类型

    1.JDBC驱动程序是什么? -  JDBC驱动程序在JDBC API中实现定义的接口,用于与数据库服务器进行交互. -  例如,使用JDBC驱动程序,可以通过发送SQL或者数据库命令,然后使用Jav ...

  2. JDBC编程:1(使用JDBC连接数据库)

    使用JDBC连接数据库 下载连接MySQL数据库的驱动 这个jar包可以在官网上对照着你的MySQL版本来下载,这里我下载的是最新的8.0.20版本, 这里是8.0.20版本的驱动包:mysql-co ...

  3. MySQL中的事务相关属性以及JDBC编程

    MySQL中的事务相关属性以及JDBC编程 事务

  4. JDBC(本质,配置环境变量,JDBC编程六步,类加载注册,sql注入,事务问题,封装工具类,悲观锁,乐观锁)

    JDBC 2021.5.21 依然跟着动力节点杜老师学!!! 1.什么是JDBC? Java DataBase Connectivity 在java语言中编写sql语句,对mysql数据库中的数据进行 ...

  5. 【MySQL从小白到高手】第六篇:事务和MySQL中的JDBC编程

    前言 目录 事务~ 什么是事务~ 事务的原子性~ 事务相关的面试题~ 脏读~ 不可重复读~ 幻读~ MySQL中事务的隔离级别~ MySQL中的JDBC编程~ JDBC~ 学习使用JDBC编程~ 引入 ...

  6. JDBC编程的事务处理

    一.事务的基本概念 数据库是一个多用户使用的共享资源.当多个用户并发地存取数据的时候,在数据库中就会产生多个用户同时存取同一数据的情况.若对并发操作不加控制,就可能会产生读取和存储不正确的数据,破坏数 ...

  7. 【Java】14 JDBC编程学习总结

    文章目录 一.JDBC是什么? 二.为什么要使用JDBC? 三.DDL.DML.DCL分别代表什么 四.JDBC有三个操作步骤 实例代码 实例代码 实例代码 五.使用PreparedStatement ...

  8. JDBC学习笔记03【JDBC事务管理、数据库连接池、JDBCTemplate】

    黑马程序员-JDBC文档(腾讯微云)JDBC笔记.pdf:https://share.weiyun.com/Kxy7LmRm JDBC学习笔记01[JDBC快速入门.JDBC各个类详解.JDBC之CR ...

  9. jdbc和mysql做游戏排行榜_MySQL数据库与JDBC编程

    欢迎关注公众号:xfxuezhang MySQL数据库与JDBC编程 JDBC (Java Database Connectivity) DDL(Data Definition Language,数据 ...

最新文章

  1. STP生成树协议原理及配置
  2. java设计模式--原始模型模式
  3. nginx响应高并发参数配置
  4. JSP -- JSP语法
  5. 拥抱.NET Core,学习.NET Core的基础知识补遗
  6. python浅拷贝的说法_Python中List的复制(直接复制、浅拷贝、深拷贝)
  7. 字符串题目 1 --------判断两个字符串是否为旋转词
  8. t580 thinkpad_聊聊ThinkPad T580:除了大屏,还有什么
  9. Spring3 MVC+Spring+Spring Jdbc实现的权限管理系统,可以控制到增删改查
  10. [WebApi] 捣鼓一个资源管理器--多文件上传+数据库辅助
  11. php 获取城市列表接口,省份城市区域列表
  12. CnOpenData中国工业企业股东信息数据
  13. m计算机代表什么意思,计算器上的m+是什么意思
  14. 外汇汇率接口 java_免费的货币汇率API
  15. 每周读书#11 - 等一朵花开
  16. 电商运营裂变新玩法—分销渠道系统模式
  17. 2018年最后一个工作日
  18. P3386 【模板】二分图最大匹配(匈牙利算法模板)
  19. Android 12源码单手模式
  20. C语言函数fopen,fclose的用法

热门文章

  1. 【LeetCode】Minimum Depth of Binary Tree 二叉树的最小深度 java
  2. 取消Win7关机时的补丁更新
  3. .net文件请求iis的回话的工作原理
  4. 新增或编辑保存时出错后,页面无法再次编辑
  5. JS弹出DIV并使整个页面背景变暗功能的实现代码
  6. mysql 创建数据库文件_mysql学习之通过文件创建数据库以及添加数据
  7. linux安装mongo卸载mongo,CentOS7安装及卸载MongoDB.md
  8. html5点击视频跳转,javascript – 播放后重定向html5视频
  9. python 获取向上两级路径_Python学习第171课--相对路径和绝对路径
  10. ajax背景、ajax对象、ajax状态、ajax与http、ajax请求数据接口、同步与异步、ajax请求XML数据、封装ajax函数、artTemplate简介、同源策略和跨域请求、JSONP