Java中的mysql事务处理

2024-08-27 12:32

本文主要是介绍Java中的mysql事务处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、事务是一组要么同时执行成功,要么同时执行失败的sql语句。是数据库操作的一个执行单元。

2、事物的四大特点:

(1)atomicity(原子性)表示一个事务内的所有操作是一个整体,要么全部成功,要么全部失败。

(2)consistency(一致性)表示一个事物内有一个操作失败时,所有更改过的数据都必须回滚到修改前的状态。

(3)isolation(隔离性)事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。

(4)durability(持久性)持久性事务完成之后,他对于系统的影响是永久性的。

3、实例(以sql语句中的insert语句为例)

[java]  view plain copy
  1. package com.test.jdbc;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.sql.PreparedStatement;  
  6. import java.sql.ResultSet;  
  7. import java.sql.SQLException;  
  8. import java.sql.Statement;  
  9.   
  10.   
  11. /** 
  12.  * 事务的基本用法 
  13.  * 
  14.  */  
  15. public class Test {  
  16.     public static void main(String[] args) {  
  17.         Connection conn = null;  
  18.         PreparedStatement ps1 = null;  
  19.         PreparedStatement ps2 = null;  
  20.         try {  
  21.             //加载驱动类  
  22.             Class.forName("com.mysql.jdbc.Driver");  
  23.             conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","123456");  
  24.               
  25.             <span style="color:#ff0000;">conn.setAutoCommit(false); //JDBC中默认是true,自动提交事务</span>  
  26.               
  27.             ps1 = conn.prepareStatement("insert into t_user (username,pwd) values (?,?)");//?是占位符  
  28.             ps1.setObject(1"张三");  
  29.             ps1.setObject(2"666666");  
  30.             ps1.execute();  
  31.             System.out.println("插入一个用户张三");  
  32.               
  33.             try {  
  34.                 Thread.sleep(3000);  
  35.             } catch (InterruptedException e) {  
  36.                 e.printStackTrace();  
  37.             }  
  38.               
  39.             ps2 = conn.prepareStatement("insert into t_user (username,pwd) values (?,?)");  
  40.             ps2.setObject(1"李四");  
  41.             ps2.setObject(2"123456");  
  42.             ps2.execute();            
  43.             System.out.println("插入一个用户李四");  
  44.               
  45.             <span style="color:#ff0000;">conn.commit();//提交事务  
  46. </span>       } catch (ClassNotFoundException e) {  
  47.             e.printStackTrace();  
  48.             try {  
  49.                 <span style="color:#ff0000;">conn.rollback();//某一条数据添加失败时,回滚</span>  
  50.             } catch (SQLException e1) {  
  51.                 e1.printStackTrace();  
  52.             }  
  53.         } catch (SQLException e) {  
  54.             e.printStackTrace();  
  55.         }finally{  
  56.             try {  
  57.                 if(ps1!=null){  
  58.                     ps1.close();  
  59.                 }  
  60.             } catch (SQLException e) {  
  61.                 e.printStackTrace();  
  62.             }  
  63.             try {  
  64.                 if(conn!=null){  
  65.                     conn.close();  
  66.                 }  
  67.             } catch (SQLException e) {  
  68.                 e.printStackTrace();  
  69.             }  
  70.         }  
  71.     }  
  72. }  
这段代码是正确的结果。运行结果:
插入一个用户张三
(等待三秒后)
插入一个用户李四

查看数据库,插入了两条数据。

接下来把数据库中刚刚插入的两条数据删掉,然后把第二条sql语句改一下,让他出错,在第二条sql语句中去掉一个占位符:
[java]  view plain copy
  1. ps2 = conn.prepareStatement("insert into t_user (username,pwd) values (?)");  
运行结果:
插入一个用户张三
(等待三秒后)
抛出错误了。。。。。。。。

然后查看一下数据库,发现数据库中两条数据都没能添加成功


这篇关于Java中的mysql事务处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1111671

相关文章

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

Java中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Spring AI集成DeepSeek的详细步骤

《SpringAI集成DeepSeek的详细步骤》DeepSeek作为一款卓越的国产AI模型,越来越多的公司考虑在自己的应用中集成,对于Java应用来说,我们可以借助SpringAI集成DeepSe... 目录DeepSeek 介绍Spring AI 是什么?1、环境准备2、构建项目2.1、pom依赖2.2