这几天在学习MySQL数据的知识,有一个小测试,用来测试数据库的提交和回滚。

刚开始的时候真的没把这个当回事,按照正常的步骤来讲的话,如下所示,加载驱动,获取数据库的连接,并且把数据库的自动提交给关闭掉。

 //加载驱动
Class.forName(driver);
//获取数据库的连接
connection = DriverManager.getConnection(url, user, password);
//关闭数据库事务的自动提交,默认值为true
connection.setAutoCommit(false);

在做测试的时候,自己使用的是建表语句,总共三句话,最后一句是错误的,按照正常情况来讲,执行错误语句以后,程序会跳转到catch代码块中,执行回滚语句。但是在刷新数据库以后,查看数据库中的表格,会发现数据库多了两张表,前两条语句执行成功,并没有回滚。

 String[] sqls={
"create table A (Sno varchar(100) ,Sname varchar(20))",
"create table B (Cno varchar(100) ,Cname varchar(20))",
"create table C (Sno varchar(100),Cno varchar(100),Grade )"
}; Connection connection = JDBCUtil.getConnection();//获取数据库的连接
try { Statement stmt=connection.createStatement(); for(String sql:sqls){
stmt.execute(sql);
} connection.commit(); //提交事务
} catch (SQLException e) {
e.printStackTrace();
try { connection.rollback();//事务的回滚
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} }

后来在网上查了一些资料,得知在MySQL中,对表的创建、删除和更改表结构等操作是回滚无效的,DDL操作直接触发隐式提交,任何事务回滚的前提是没有commit,隐式提交直接执行commit了,后续的rollback对前面的语句无效。如果想对建表语句回滚的话,可以在catch语句块里面,模拟回滚操作,判断表格否存在,存在就删除即可。

MySQL数据库的回滚失败(JAVA)的更多相关文章

  1. @transactional注解,报错后数据库操作回滚失败

    1. https://jingyan.baidu.com/article/3a2f7c2e27d51b26afd611ff.html 2. https://blog.csdn.net/lee_star ...

  2. 记一次腾讯云MySQL数据库数据回滚

    如题,因为操作人员的问题,需要对数据库数据进行回滚. 可以看到,设置了7天自动备份,且是物理冷备. 什么是物理冷备?科普一下: (1)热备:在数据库运行时,直接进行备份,对运行的数据库没有影响.(2) ...

  3. MySql数据库事务正常提交,回滚失败

    问题:在初次练习Mysql数据库事务时,事务正常提交,但是在遇到异常应当回滚时,回滚失败. 代码如下: //2.更新操作. public void update(Connection conn, St ...

  4. 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】

    一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...

  5. 第二百八十六节,MySQL数据库-MySQL事务操作(回滚)

    MySQL数据库-MySQL事务操作(回滚) 事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性. 举例:有这样一张表 从表里可以看出张 ...

  6. alter table导致的mysql事务回滚失败

    今天做数据迁移, 发现事务有时候可以回滚, 有时候不可以回滚, 最后一点点调试发现中间有段修改表结构的语句, 最终导致回滚失败. 1.MySQL最常用的两个表类型: InnoDB和MyISAM.MyI ...

  7. MySql数据库类型bit等与JAVA中的对应类型【布尔类型怎么存】

    用char(1):可以表示字符或者数字,但是不能直接计算同列的值.存储消耗1个字节 用tinyint:只能表示数字,可以直接计算,存储消耗2个字节 用bit: 只能表示0或1,不能计算,存储消耗小于等 ...

  8. JDBC批处理---(java 对数据库的回滚) .

    1先看一下程序: package com.redking.jdbc.demo;    import java.sql.Connection;    import java.sql.DriverMana ...

  9. JAVA数据库操作回滚小结

    一:总结的原因 在最近的工作中,遇到了一个一对多关系多表数据传输,传送成功状态绑定在主数据表上,因为代码不健壮问题造成了主表传送状态更新失败,而子表数据就被重复插入.又由于数据传输频率很高,我们的测试 ...

随机推荐

  1. 内置装饰器一:@classmethod、@staticmathod

    使用 @classmethod 和 @staticmathod 后,类的方法的调用 一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法. 而使用@staticmethod或@classmet ...

  2. BZOJ 1008--[HNOI2008]越狱(容斥&快速幂)

    1008: [HNOI2008]越狱 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 12593  Solved: 5439[Submit][Status ...

  3. IntelliJ IDEA配置maven3.3.3+mybatis3.1.1

    注:本文参考了孤傲苍狼关于MyBatis学习总结,在此表示感谢,原文链接为http://www.cnblogs.com/xdp-gacl/p/4261895.html. 1.新建project,勾选c ...

  4. java对象的结构

    [Java对象解析]不得不了解的对象头 一个Java对象到底占用多大内存? JVM源码分析之java对象头实现 java对象在内存中的结构(转帖) 一个Java对象到底占多大内存? 在Hotspot ...

  5. python学习笔记06-enumerate()

    enumerate()   python 内置函数  枚举 列举的意思 对于一个可迭代的(iterable)/可遍历的对象(如列表.字符串),enumerate将其组成一个索引序列,利用它可以同时获得 ...

  6. MFC 剪切板的使用、线程介绍

    一.MFC 剪切板 CListBox *pList = (CListBox*)GetDlgItem(IDC_LIST1); // 获取ListBox控件句柄 CString strTmp; pList ...

  7. 【xsy2748】 fly 矩阵快速幂

    题目大意:有$n$个点,$m$条有向边,其中第$i$条边需要在$t_i$秒后才出现在图上. 有一个人刚开始呆在$1$号节点,每秒钟他必须要选择一条从他所在位置走出去的边,走出去(如果没有的话这人就死了 ...

  8. 【bzoj2961】共点圆 k-d树

    更新:此题我的代码设置eps=1e-8会WA,现在改为1e-9貌似T了 此题网上的大部分做法是cdq分治+凸包,然而我觉得太烦了,于是自己口胡了一个k-d树做法: 加入一个圆$(x,y)$,直接在k- ...

  9. 剑指offer四十六之孩子们的游戏(圆圈中最后剩下的数,约瑟夫环问题)

    一.题目 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈.然后,他随机指 ...

  10. Java之IO(二)BufferedInputStream和BufferedOutputStream

    转载请注明源出处:http://www.cnblogs.com/lighten/p/6971234.html 1.前言 本文主要介绍输入输出流中的BufferedInputStream和Buffere ...