dljd_(018-020)_jdbc中mysql的事务管理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了dljd_(018-020)_jdbc中mysql的事务管理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5581字,纯文字阅读大概需要8分钟。
内容图文
![dljd_(018-020)_jdbc中mysql的事务管理](/upload/InfoBanner/zyjiaocheng/504/0b22866318cc46dc89f3ed1c1fa81285.jpg)
执行结果截图:
数据库截图:
当我们在debug模式下执行完第一条数据后执行第二条数据前,我们可以看到第一条数据已经被插入到数据库当中了、因此可以判断出第一条事务被默认的提交到数据库当中了。
当在执行第四条语句的时候出了主键冲突作用、但是这个错误不会影响到前三条数据的正常执行(这就是鉴于事物的原子行)
当第四条语句(事务)出错后,那么第五条数据是不会被正常执行的!
二、这种jdbc中mysql的默认提交事务在某些场合下并不使用
比如说进行转账操作时、a 卡向b卡转账 100万元
当程序跑到a卡里面的钱被扣了100万元后、b卡里面的钱没有被加前、突然停电了、那么这种情况就是a持卡人说我向你转了100万、而b持卡人说我根本没有收到100万、我们怎么在程序里面避免这种现象的发生?(将a卡扣钱事务和b卡的加钱事务放到一个事务当中)、当扣钱和加钱同时执行成功,则本次转账成功、否则当次事务中的任何一个操作出现异常的情况下视为本事务执行失败,恢复到转账前。
2.1实现(在事务执行之前将事务的提交方式改为手动提交)
此处由于本人比较小懒、就不模拟转账操作了(设计到转账还要从新见测试表)、我们拿之前的例子说明即可(因为原理一样):
package edu.aeon.jdbc; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import edu.aeon.aeonutils.AeonJdbcUtils; /** * [说明]:修改jdbc中事务的提交方式 * @author aeon */ public class TestJDBC { /** * @throws SQLException */ public static void jdbc_insert() throws SQLException{ Connection connection=null; PreparedStatement preparedStatement = null; try { connection = AeonJdbcUtils.getMySqlConnection(); //设置事务的提交方式为手动提交 connection.setAutoCommit(false); String sql="insert into user(userid,username,userpw) values (?,?,?)"; //第一条数据 //将sql语句进行预编译然后保存到preparedStatement对象中 preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, 10006); preparedStatement.setString(2, "aeon6"); preparedStatement.setString(3, "aeon6"); int rowCount = preparedStatement.executeUpdate(); //第二条数据 preparedStatement.setInt(1, 10007); preparedStatement.setString(2, "aeon7"); preparedStatement.setString(3, "aeon7"); rowCount = preparedStatement.executeUpdate(); //第三条数据 preparedStatement.setInt(1, 10008); preparedStatement.setString(2, "aeon8"); preparedStatement.setString(3, "aeon8"); rowCount = preparedStatement.executeUpdate(); //第四条 preparedStatement.setInt(1, 10006);//模拟错误 preparedStatement.setString(2, "aeon9"); preparedStatement.setString(3, "aeon9"); rowCount = preparedStatement.executeUpdate(); //第五条数据 preparedStatement.setInt(1, 100010); preparedStatement.setString(2, "aeon10"); preparedStatement.setString(3, "aeon10"); rowCount = preparedStatement.executeUpdate(); //提交事务 connection.commit(); System.out.println("本次操作成功!"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { connection.rollback(); System.out.println("本次操作失败!"); e.printStackTrace(); }finally { AeonJdbcUtils.closeDB(null, preparedStatement, connection); } } public static void main(String[] args) { try { jdbc_insert(); } catch (SQLException e) { System.out.println("本次操作失败!"); e.printStackTrace(); } } }
执行结果截图:
数据库截图:
当我们将这个模拟异常去掉后、执行结果截图:
再去看看数据库:
可见数据已经进来了!
当使用jdbc修改了事务的提交方式为手动提交后、那么接下来执行的所有操作都将被放入到一个事务中了(commit()、rollback()之前的操作都将是一个事务)、当遇到commit()时将当前事务提交到数据库中、当遇到rollback()时,当前事务中的所有操作都将被撤回到事务执行之前(又恢复jdbc提交事务的默认方式)。
dljd_(018-020)_jdbc中mysql的事务管理
标签:结果 .exe mysql管理 实现 main row 出现 例子 name
本文系统来源:https://www.cnblogs.com/aeon/p/10080899.html
内容总结
以上是互联网集市为您收集整理的dljd_(018-020)_jdbc中mysql的事务管理全部内容,希望文章能够帮你解决dljd_(018-020)_jdbc中mysql的事务管理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。