在与数据库操作时,如果执行多条更新的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. 时间序列深度学习:状态 LSTM 模型预测太阳黑子

    目录 时间序列深度学习:状态 LSTM 模型预测太阳黑子 教程概览 商业应用 长短期记忆(LSTM)模型 太阳黑子数据集 构建 LSTM 模型预测太阳黑子 1 若干相关包 2 数据 3 探索性数据分析 ...

  2. 经典算法--冒泡排序(Java)

    原理:将相邻元素的较大值赋给右边 思路:① 1.将集合或数组内的第一个元素与第二个元素进行比较,较大值赋给右边: 2.将第二个元素与第三个元素进行比较,较大值赋给右边: ....... (N-1).将 ...

  3. telerik WinForm主题切换

    通过按钮或Form_Load中切换: ThemeResolutionService.ApplicationThemeName = "Windows 7"; //具体的主题名,不同的 ...

  4. vue组件引入失败原因之一

    引入组件的时候,路径问题 引入当前文件夹的另外一个文件:import ZiZuJianOne from 'ZiZuJianOne.vue',提示: 加上:“./”让把路径变成:import ZiZuJ ...

  5. 如何看数据库是否处在force_logging模式下

    SQL> select log_mode, force_logging from v$database; LOG_MODE     FOR------------ ---ARCHIVELOG   ...

  6. exLucas学习笔记

    exLucas学习笔记 Tags:数学 写下抛硬币和超能粒子炮改 洛谷模板代码如下 #include<iostream> #define ll long long using namesp ...

  7. python-利用Python窗口可视化抽象开发山寨版翻译软件

    1.图片展示: 2.写出上面图式的小脚本需要利用python两个方面的知识: (1)可视化库 (需用库:tkinter) (2)简单爬虫知识 (需用库:requests) 注意:爬虫在获取翻译信息时, ...

  8. 按键精灵手机版多点找色,图片对比 by <剑行洪荒> 忠哥

    代码: Do    Dim ret1,ret2    Delay 500    ret1 = CmpColor(76,72, "153274", 0.9)    ret2 = Cm ...

  9. 【转】sshpass-Linux命令之非交互SSH密码验证

      sshpass-Linux命令之非交互SSH密码验证 ssh登陆不能在命令行中指定密码.sshpass的出现,解决了这一问题.sshpass用于非交互SSH的密码验证,一般用在sh脚本中,无须再次 ...

  10. 获取本地ip和获取公网ip

    import socket def get_local_ip(): ''' 获取本地ip地址 :return: ''' s = socket.socket(socket.AF_INET, socket ...