在与数据库操作时,如果执行多条更新的SQL语句(如:update或insert语句),在执行第一条后如果出现异常或电脑断电,

则后面的SQL语句执行不了,这时候设定我们自己提交SQL语句,不让JDBC自动提交,格式为:

conn.setAutoCommit(false);

执行多条SQL语句;

conn.commit();

//恢复自动提交模式

conn.setAutoCommit(true);

代码示例:

  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.PreparedStatement;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.sql.Statement;
  7. public class TestTransaction {
  8. /**
  9. * @param args
  10. */
  11. public static void main(String[] args) {
  12. // TODO Auto-generated method stub
  13. Connection con = null;
  14. Statement stmt = null;
  15. ResultSet rs = null;
  16. PreparedStatement ps = null;
  17. try {
  18. Class.forName("com.mysql.jdbc.Driver");
  19. con = DriverManager.getConnection(
  20. "jdbc:mysql://localhost:3306/mydb", "root", "root");
  21. System.out.println("连接数据库成功!");
  22. stmt = con.createStatement();
  23. // JAVA默认为TRUE,我们自己处理需要设置为FALSE,并且修改为手动提交,才可以调用rollback()函数
  24. con.setAutoCommit(false);
  25. stmt.addBatch("insert into people values(078,'ding','duo')");
  26. stmt.addBatch("insert into people values(30,'nokia','ddd')");
  27. stmt.executeBatch();
  28. // 事务提交
  29. con.commit();
  30. // 设置为自动提交,改为TRUE
  31. con.setAutoCommit(true);
  32. /*
  33. * String sql = "select * from people"; rs = stmt.executeQuery(sql);
  34. * while(rs.next()){ System.out.println(rs.getString("id") + " " +
  35. * rs.getString("name")); }
  36. */
  37. } catch (ClassNotFoundException e) {
  38. e.printStackTrace();
  39. } catch (SQLException se) {
  40. se.printStackTrace();
  41. try {
  42. // 产生的任何SQL异常都需要进行回滚,并设置为系统默认的提交方式,即为TRUE
  43. if (con != null) {
  44. con.rollback();
  45. con.setAutoCommit(true);
  46. }
  47. } catch (SQLException se1) {
  48. se.printStackTrace();
  49. }
  50. } finally {
  51. try {
  52. if (rs != null) {
  53. rs.close();
  54. rs = null;
  55. }
  56. if (stmt != null) {
  57. stmt.close();
  58. stmt = null;
  59. }
  60. if (con != null) {
  61. con.close();
  62. con = null;
  63. }
  64. } catch (SQLException se) {
  65. se.printStackTrace();
  66. }
  67. }
  68. }
  69. }

JAVA中处理事务的程序--多条更新SQL语句的执行(包括回滚)的更多相关文章

  1. 一条更新SQL的内部执行及日志模块

    一条更新SQL的内部执行 学习MySQL实战45讲,非常推荐学 还是老图: 上文复习 在执行查询语句的时候,会执行连接器(总要连上才能搞事情),然后去查询缓存(MySQL8+删除了),有数据返回,没数 ...

  2. 在 Java 中如何更高效地存储和管理 SQL 语句?

    [编者按]还在为管理 Java 代码中的 SQL 语句而烦恼吗?让 Zemian 帮你摆脱困境吧!本文系 OneAPM 工程师编译整理 注意:使用java.util.Properties#loadFr ...

  3. MySQL概述 - 一条查询sql语句的执行过程

    Server层 连接器 建立连接.获取权限.维持和管理连接. 连接建立比较复杂,建议使用长连接 定期断开长连接 mysql_reset_connection指令 查询缓存 建议关闭,任何更新操作会此t ...

  4. 第77节:Java中的事务和数据库连接池和DBUtiles

    第77节:Java中的事务和数据库连接池和DBUtiles 前言 看哭你,字数:8803,承蒙关照,谢谢朋友点赞! 事务 Transaction事务,什么是事务,事务是包含一组操作,这组操作里面包含许 ...

  5. Java中的事务——全局事务与本地事务

    转载,原文来源 http://www.hollischuang.com Java事务的类型有三种:JDBC事务.JTA(Java Transaction API)事务.容器事务.这是从事务的实现角度区 ...

  6. Java中的事务——JDBC事务和JTA事务

    Java中的事务——JDBC事务和JTA事务 转载:http://www.hollischuang.com/archives/1658 之前的事务介绍基本都是数据库层面的事务,本文来介绍一下J2EE中 ...

  7. java中对事务的理解

    一.什么是事务 事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取. 二.事务的原则(ACID) 原子性:事务要么全部都被执行,要么就全都不被执行,如果有子事务提交失败,那么 ...

  8. 实现java 中 list集合中有几十万条数据,每100条为一组取出

    解决"java 中 list集合中有几十万条数据,每100条为一组取出来如何实现,求代码!!!"的问题. 具体解决方案如下: /** * 实现java 中 list集合中有几十万条 ...

  9. Java中的事务

    Java中的事务 学习了:https://www.cnblogs.com/chengpeng15/p/5802930.html 膜拜一下 org 分为三类:jdbc事务.jta事务.容器事务:

随机推荐

  1. Scala_单例对象

    在 Scala 中,是没有 static 这个东西的,但是它也为我们提供了单例模式的实现方法,那就是使用关键字 object. 对象的无参构造器在第一次使用时被调用,且单例对象没有有残构造器. Enu ...

  2. Bluebox Security最新提报Android漏洞的初步探讨(转)

    Bluebox Security在7月3号的时候,在官网上发布了一个据称99%  Android机器都有的一个漏洞.国内最早在4号开始有媒体报道,并持续升温.该漏洞可使攻击者在不更改Android应用 ...

  3. Memcached 集群架构问题归纳

    集群架构方面的问题o memcached是怎么工作的?o memcached最大的优势是什么?o memcached和MySQL的query cache相比,有什么优缺点?o memcached和服务 ...

  4. 洛谷 P1198 [JSOI2008]最大数

    洛谷 P1198 [JSOI2008]最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. ...

  5. Python_sklearn机器学习库学习笔记(六) dimensionality-reduction-with-pca

    # 用PCA降维 #计算协方差矩阵 import numpy as np X=[[2,0,-1.4], [2.2,0.2,-1.5], [2.4,0.1,-1], [1.9,0,-1.2]] np.c ...

  6. Java并发工具类(四):线程间交换数据的Exchanger

    简介 Exchanger(交换者)是一个用于线程间协作的工具类.Exchanger用于进行线程间的数据交换.它提供一个同步点,在这个同步点两个线程可以交换彼此的数据.这两个线程通过exchange方法 ...

  7. React Native开启实时重载(Enable live Reload)

    传统的原生应用开发中,每一次修改都需要重新编译. 但在 RN 中你只需要刷新一下 JavaScript 代码,就能立刻看到变化. 操作 1.安卓模拟器 按下Ctrl + M,Enable live R ...

  8. 取消Ubuntu18.04开机输入密码登录

    设置>>详细信息>>用户>>解锁>>(输入密码进行认证)>>{自动登录}选项打开

  9. CSS清浮动办法

    骨灰级解决办法: .clear{clear:both;height:0;overflow:hidden;} 上诉办法是在需要清除浮动的地方加个div.clear或者br.clear,我们知道这样能解决 ...

  10. VGGnet——从TFrecords制作到网络训练

    作为一个小白中的小白,多折腾总是有好处的,看了入门书和往上一些教程,很多TF的教程都是从MNIST数据集入手教小白入TF的大门,都是直接import MNIST,然后直接构建网络,定义loss和opt ...