jdbc连接mysql,涉及到的事务问题

  1. package com.examples.jdbc.o10_jdbc事务;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.PreparedStatement;
  5. import java.sql.SQLException;
  6. import java.util.ResourceBundle;
  7. /**
  8. * jdbc事务演示:单机转帐
  9. */
  10. public class Test {
  11. public static void main(String[] args) {
  12. //countUnsafe();
  13. countSafe();
  14. }
  15. /**
  16. * 单机转帐:开启事务
  17. */
  18. private static void countSafe() {
  19. //资源绑定器绑定配置属性文件
  20. ResourceBundle resourceBundle = ResourceBundle.getBundle("config/jdbc");
  21. String driver = resourceBundle.getString("driver");
  22. String url = resourceBundle.getString("url");
  23. String userName = resourceBundle.getString("userName");
  24. String passWord = resourceBundle.getString("passWord");
  25. //2个资源文件
  26. Connection connection = null;
  27. PreparedStatement preparedStatement = null;
  28. //jdbc6步骤
  29. try {
  30. //1.
  31. Class.forName(driver);
  32. //2.
  33. connection = DriverManager.getConnection(url, userName, passWord);
  34. connection.setAutoCommit(false); //开启事务
  35. //3.
  36. String sql = "update tb_count set money = ? where count = ?";
  37. preparedStatement = connection.prepareStatement(sql);
  38. preparedStatement.setDouble(1, 10000);
  39. preparedStatement.setInt(2, 111);
  40. int num = preparedStatement.executeUpdate();
  41. //String s = null;
  42. //s.toString();
  43. preparedStatement.setDouble(1, 10000);
  44. preparedStatement.setInt(2, 222);
  45. num += preparedStatement.executeUpdate();
  46. System.out.println(num == 2 ? "转帐成功" : "转帐失败");
  47. connection.commit(); //提交事务
  48. } catch (ClassNotFoundException | SQLException e) {
  49. //事务回滚
  50. if(connection != null){
  51. try {
  52. connection.rollback();
  53. } catch (SQLException ex) {
  54. ex.printStackTrace();
  55. }
  56. }
  57. e.printStackTrace();
  58. }finally {
  59. //6.
  60. if(preparedStatement != null){
  61. try {
  62. preparedStatement.close();
  63. } catch (SQLException e) {
  64. e.printStackTrace();
  65. }
  66. }
  67. if(connection != null){
  68. try {
  69. connection.close();
  70. } catch (SQLException e) {
  71. e.printStackTrace();
  72. }
  73. }
  74. }
  75. }
  76. /**
  77. * 单机转帐:未开启事务
  78. */
  79. private static void countUnsafe() {
  80. //资源绑定器绑定配置属性文件
  81. ResourceBundle resourceBundle = ResourceBundle.getBundle("config/jdbc");
  82. String driver = resourceBundle.getString("driver");
  83. String url = resourceBundle.getString("url");
  84. String userName = resourceBundle.getString("userName");
  85. String passWord = resourceBundle.getString("passWord");
  86. //2个资源文件
  87. Connection connection = null;
  88. PreparedStatement preparedStatement = null;
  89. //jdbc6步骤
  90. try {
  91. //1.
  92. Class.forName(driver);
  93. //2.
  94. connection = DriverManager.getConnection(url, userName, passWord);
  95. //3.
  96. String sql = "update tb_count set money = ? where count = ?";
  97. preparedStatement = connection.prepareStatement(sql);
  98. preparedStatement.setDouble(1, 10000);
  99. preparedStatement.setInt(2, 111);
  100. int num = preparedStatement.executeUpdate();
  101. String s = null;
  102. s.toString();
  103. preparedStatement.setDouble(1, 10000);
  104. preparedStatement.setInt(2, 222);
  105. num += preparedStatement.executeUpdate();
  106. System.out.println(num == 2 ? "转帐成功" : "转帐失败");
  107. } catch (ClassNotFoundException | SQLException e) {
  108. e.printStackTrace();
  109. }finally {
  110. //6.
  111. if(preparedStatement != null){
  112. try {
  113. preparedStatement.close();
  114. } catch (SQLException e) {
  115. e.printStackTrace();
  116. }
  117. }
  118. if(connection != null){
  119. try {
  120. connection.close();
  121. } catch (SQLException e) {
  122. e.printStackTrace();
  123. }
  124. }
  125. }
  126. }
  127. }

jdbc 10:jdbc事务的更多相关文章

  1. Java数据库连接——JDBC调用存储过程,事务管理和高级应用

    一.JDBC常用的API深入详解及存储过程的调用 相关链接:Jdbc调用存储过程 1.存储过程(Stored Procedure)的介绍 我们常用的操作数据库语言SQL语句在执行的时候需要先编译,然后 ...

  2. JDBC&&c3p0、事务、批处理、多线程 于一体的经典秘方QueryRunner

    目录: 基础篇_功能各自回顾 JDBC基础代码回顾(使用JdbcUtils工具简化) c3p0数据库连接池的使用(使用JdbcUtils工具简化) 大数据的插入(使用c3p0+JdbcUtils工具简 ...

  3. 一、DAO设计模式 二、DAO设计模式的优化 三、JDBC中的事务,连接池的使用

    一.DAO设计模式概述###<1>概念 DAO,Data Access Object ,用于访问数据库的对象. 位于业务逻辑和数据持久化层之间,实现对数据持久化层的访问![](1.png) ...

  4. JAVA JDBC(存储过程和事务管理)

    1.什么是存储过程 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程 ...

  5. 创建JDBC模板简化代码、JDBC应用的事务管理以及连接池的作用

    一.创建JDBC模板简化代码 一个简单的查询.要做这么一大堆事情,并且还要处理异常,我们不防来梳理一下: 1.获取connection  2.获取statement  3.获取resultset  4 ...

  6. JDBC基础:JDBC快速入门,JDBC工具类,SQL注入攻击,JDBC管理事务

    JDBC基础 重难点梳理 一.JDBC快速入门 1.jdbc的概念 JDBC(Java DataBase Connectivity:java数据库连接)是一种用于执行SQL语句的Java API,可以 ...

  7. JAVAEE——spring03:spring整合JDBC和aop事务

    一.spring整合JDBC 1.spring提供了很多模板整合Dao技术 2.spring中提供了一个可以操作数据库的对象.对象封装了jdbc技术. JDBCTemplate => JDBC模 ...

  8. java框架之Spring(3)-JDBC模板使用&事务管理

    下面内容使用到的 jar 包下载 JDBC模板使用 入门 1.导包,如要导入 Spring 的基本开发包.数据库驱动包.Spring 提供的 JDBC 模板包,如下: 2.测试: @Test publ ...

  9. JDBC编程之事务的使用教程

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5868750.html  关于事务的理论知识.ACID特性等等,网上太多了,在此不一一重复.本文主要着重  事务 ...

随机推荐

  1. 尾递归与 memorize 优化

    尾递归与 memorize 优化 本文写于 2020 年 12 月 10 日 递归 递归是一种非常常见的算法思维,在大家刚开始学编程的时候应该就会接触到. 我们可以这么理解递归: function 讲 ...

  2. 吊炸天,Spring Security还有这种用法!

    在用Spring Security项目开发中,有时候需要放通某一个接口时,我们需要在配置中把接口地址配置上,这样做有时候显得麻烦,而且不够优雅.我们能不能通过一个注解的方式,在需要放通的接口上加上该注 ...

  3. 好客租房21-react组件的两种创建方式(函数组件)

    1使用函数创建组件 函数组件:使用js的函数或者箭头函数创建的组件 约定1:函数组件名称必须以 开头 约定2:函数组件必须有返回值 表示该组件的结构 如果返回值为null 表示不渲染任何内容 2.1使 ...

  4. SQL中常用的字符串LEFT函数和RIGHT函数详解!

    今天继续整理日常可能经常遇到的一些处理字符串的函数,记得点赞收藏!以备不时之需!看到最后有惊喜! LEFT(expression, length)函数 解析:从提供的字符串的左侧开始提取给定长度的字符 ...

  5. unity---点击事件

    点击事件 点击触发的事件脚本 脚本挂载方式 On Click() 如果点击后触发,调用Button物体下,Button_lick脚本中的func函数/func_text 结果

  6. vue ui 创建vue项目 没反应的解决办法 2021

    1.升级vue 脚手架 即可   2.再  vue ui  创建项目 cnpm i -g @vue/cli

  7. node-sass,sass-loader和node之间的关系

    vue-cli运行在node平台上scss语言是运行在 node-sass平台上node-sass的运行环境是node平台vue-cli工程中不识别scss语法,.scss模块,sass-loader ...

  8. 封装axios请求

    import axios from 'axios' import router from '@/router' axios.defaults.baseURL = system.requestBaseU ...

  9. 选择ERP频频踩雷?国内外ERP有差异,突破ERP软件单一性是关键

    信息化日新月异的蓬勃发展,导致企业在选择ERP软件时频频踩雷.企业如何选择出一个适合自己的ERP软件系统呢?是选择国外知名公司的ERP软件产品,还是选择国内性价比高的ERP软件产品呢,小编就带大家了解 ...

  10. 在两台配置了Win10操作系统的电脑之间直接拷贝文件

    前提条件:需要一根网线 每台电脑需手动设置IP地址 设置IP地址随意,示例为:10.10.2.11 和 10.10.2.12 每台电脑需关闭Windows防火墙 测试网络是否连通 方式一 远程桌面连接 ...