Java事务处理

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

事务

1.原子性

事务是应用中不可再分的最小逻辑执行体

2.一致性

事务的执行结果必须使数据库从一个一致性状态变到另一个一致性状态

3.隔离性

各个 事务的执行不干扰

4.持续性

事务一旦提交,对数据库所做的任何改变都记录到永久存储器中,即保存到了物理数据库

Java中的事务

package ch13;
import java.sql.*;

/**
 * Created by Jiqing on 2016/12/26.
 */
public class TransactionTest {
    private String driver;
    private String url;
    private String user;
    private String pass;
    // 初始化参数
    public void initParam() {
        driver = "com.mysql.jdbc.Driver";
        url    = "jdbc:mysql://127.0.0.1:3306/test";
        user   = "root";
        pass   = "123456";
    }

    public void insertInTransation(String[] sqls) throws Exception {
        // 加载驱动
        Class.forName(driver);
        try (
                Connection conn = DriverManager.getConnection(url,user,pass)) {
            // 关闭自动提交
            conn.setAutoCommit(false);
            try(
                    // 使用Connection来创建一个Statement
                    Statement stmt = conn.createStatement()) {
                    for (String sql : sqls) {
                        stmt.executeUpdate(sql);
                    }
            }

            // 回滚
            // conn.rollback();

            // 提交事务
            conn.commit();
        }


    }

    public static void main(String[] args) throws Exception {
        TransactionTest tt = new TransactionTest();
        tt.initParam();
        String[] sqls = new String[] {
                "insert into student values('1','Li')",
                "insert into student values('2','Zhao')",
                "insert into student values('3','Ji')"
        };
        tt.insertInTransation(sqls);
    }
}

增加回滚

package ch13;
import java.sql.*;

/**
 * Created by Jiqing on 2016/12/26.
 */
public class TransactionTest {
    private String driver;
    private String url;
    private String user;
    private String pass;
    // 初始化参数
    public void initParam() {
        driver = "com.mysql.jdbc.Driver";
        url    = "jdbc:mysql://127.0.0.1:3306/test";
        user   = "root";
        pass   = "123456";
    }

    public void insertInTransation(String[] sqls) throws Exception {
        // 加载驱动
        Class.forName(driver);
        try (
                Connection conn = DriverManager.getConnection(url,user,pass)) {
            // 关闭自动提交
            conn.setAutoCommit(false);
            try(
                    // 使用Connection来创建一个Statement
                    Statement stmt = conn.createStatement()) {
                    for (String sql : sqls) {
                        stmt.executeUpdate(sql);
                    }
            }

            // 回滚
            conn.rollback();

            // 提交事务
            conn.commit();
        }


    }

    public static void main(String[] args) throws Exception {
        TransactionTest tt = new TransactionTest();
        tt.initParam();
        String[] sqls = new String[] {
                "insert into student values('4','Qian')",
                "insert into student values('5','Sun')",
                "insert into student values('6','Liu')"
        };
        tt.insertInTransation(sqls);
    }
}

内容不会被保存。


本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/6224159.html,如需转载请自行联系原作者

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
SQL Oracle 网络协议
7-java连接oracle-Oracle中的事务处理
了解7-java连接oracle-Oracle中的事务处理。
214 0
|
存储 SQL Java
java学习:数据增删改查、存储过程调用及事务处理
为了方便,先定义二个常量: package jmyang.utils; public class ConstDefine { /** * WebLogic服务器地址 */ public static final String WebLogi...
1045 0
|
13天前
|
监控 安全 Java
在 Java 中使用线程池监控以及动态调整线程池时需要注意什么?
【10月更文挑战第22天】在进行线程池的监控和动态调整时,要综合考虑多方面的因素,谨慎操作,以确保线程池能够高效、稳定地运行,满足业务的需求。
93 38
|
10天前
|
安全 Java
java 中 i++ 到底是否线程安全?
本文通过实例探讨了 `i++` 在多线程环境下的线程安全性问题。首先,使用 100 个线程分别执行 10000 次 `i++` 操作,发现最终结果小于预期的 1000000,证明 `i++` 是线程不安全的。接着,介绍了两种解决方法:使用 `synchronized` 关键字加锁和使用 `AtomicInteger` 类。其中,`AtomicInteger` 通过 `CAS` 操作实现了高效的线程安全。最后,通过分析字节码和源码,解释了 `i++` 为何线程不安全以及 `AtomicInteger` 如何保证线程安全。
java 中 i++ 到底是否线程安全?
|
1天前
|
安全 Java 测试技术
Java并行流陷阱:为什么指定线程池可能是个坏主意
本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。
|
1天前
|
安全 Java 编译器
Java多线程编程的陷阱与最佳实践####
【10月更文挑战第29天】 本文深入探讨了Java多线程编程中的常见陷阱,如竞态条件、死锁、内存一致性错误等,并通过实例分析揭示了这些陷阱的成因。同时,文章也分享了一系列最佳实践,包括使用volatile关键字、原子类、线程安全集合以及并发框架(如java.util.concurrent包下的工具类),帮助开发者有效避免多线程编程中的问题,提升应用的稳定性和性能。 ####
15 1
|
5天前
|
存储 设计模式 分布式计算
Java中的多线程编程:并发与并行的深度解析####
在当今软件开发领域,多线程编程已成为提升应用性能、响应速度及资源利用率的关键手段之一。本文将深入探讨Java平台上的多线程机制,从基础概念到高级应用,全面解析并发与并行编程的核心理念、实现方式及其在实际项目中的应用策略。不同于常规摘要的简洁概述,本文旨在通过详尽的技术剖析,为读者构建一个系统化的多线程知识框架,辅以生动实例,让抽象概念具体化,复杂问题简单化。 ####
下一篇
无影云桌面