在与数据库操作时,如果执行多条更新的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. An Introduction to the Basics of Modern CSS Buttons

    https://www.sitepoint.com/modern-css-buttons/

  2. how browser works

    https://developers.google.com/speed/articles/reflow http://blog.letitialew.com/post/30425074101/repa ...

  3. 本地使用xshell连接本地虚拟机

    一.环境说明: 操作系统:win10 虚拟软甲:vmware破解版 终端工具:xshell 参考网址:[xshell连接本地虚拟机linux系统][注意事项][手动修改网络配置] 二.连接步骤: 1. ...

  4. 如何搭建openvpn

    一.什么是openvpn Openvpn是一款基于openssl的开源vpn软件,它可以很好的运行在linux及windows各发行版本中,它的核心技术是虚拟网卡,其实它更像是一个底层的网卡驱动软件, ...

  5. python基础学习1-迭代器

    #!/usr/bin/env python # -*- coding:utf-8 -*- #自定义迭代器 需要 重写 __iter__()和__next__() 两个魔法方法 class Fibs: ...

  6. const限定符用法汇总

    const限定符限定变量的类型是一个常量,对象一旦创建后其值就无法改变,所以const对象必须初始化. 初始化 const int i = get_size(); //运行时初始化 const int ...

  7. loj#121.「离线可过」动态图连通性

    题面 话说#122怎么做啊 题解 我的\(\mathrm{LCT}\)水平极差,连最小生成树都快忘了,赶紧复习一下 做法和这篇是一样的 这道题还可以练习线段树分治 还可以练习ETT 果然是道吼题 代码 ...

  8. 180807-Quick-Task 动态脚本支持框架之Groovy脚本加载执行

    Quick-Task 动态脚本支持框架之Groovy脚本加载执行 上一篇简答说了如何判断有任务动态添加.删除或更新,归于一点就是监听文件的变化,判断目录下的Groovy文件是否有新增删除和改变,从而判 ...

  9. 【Unity Shader】(四) ------ 纹理之法线纹理、单张纹理及遮罩纹理的实现

    笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Shader](三) ----- ...

  10. MAVEN项目导入src/test/java项目报错

    转载博客:https://blog.csdn.net/gengjianchun/article/details/78679036    https://blog.csdn.net/jsloveyou/ ...