JDBC事务的简单使用

在实际功能当中,经常会碰到同时对一组数据进行增加和减少,最常见的就是交易功能。

事务内执行的语句,要么都成功,要么都失败,如果有一句没执行成功,整个事务都不会提交的。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBC_transactions {
    public static void main(String[] args) {
        //使用try-with-resources的方法自动关闭连接
        //首先还是先初始化驱动
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        //连接数据库
        try (Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8", "root", "admin");
             Statement statement = connection.createStatement();) {
            //执行一个事务
            //首先关闭自动提交
            connection.setAutoCommit(false);
            //执行两个更新语句,一个增加某个字段,一个减少某个字段
            String sql1="update hero set hp=hp-10 where id=1";
            String sql2="update hero set hp=hp+10 where id=1";
            statement.execute(sql1);
            statement.execute(sql2);
            //手动提交
            connection.commit();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

这句话就是关闭自动提交。

connection.setAutoCommit(false);

一直到

connection.commit();

这两句话内的sql语句就是一个事务。如果我们故意制造个错误,比如故意写错sql语句的某个关键字,编译器会报错,并且正确的sql语句不会提交。

原文地址:https://www.cnblogs.com/lbhym/p/11708191.html

时间: 2024-11-08 21:28:53

JDBC事务的简单使用的相关文章

分层架构下的纯JDBC事务控制简单解决方案【转】

http://blog.csdn.net/qjyong/article/details/5464835 对目前的JavaEE企业应用开发来说,基本都会采用分层的架构, 这样可以分散关注.松散耦合.逻辑复用.标准定义.例如,目前使用SSH组合时典型的四层架构:表示层.业务层.持久层和数据层:那么,在四层架构中,事务的控制应该放在哪一层呢? 如果使用Spring框架,它对事务做了很好的封装,通过它的AOP配置,可以灵活的配置在任何一层:但是在很多的需求和应用,直接使用JDBC事务控制还是有其优势的.

jdbc 事务简单例子

 一.什么是Java事务 通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性(isolation)和持久性(durability)的缩写.事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效.一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态.隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见.持久性表示已提交的

Java的JDBC事务详解

一.事务的理解: 1.事务的特性: 1) 原子性(atomicity):事务是数据库的逻辑工作单位,而且是必须是原子工作单位,对于其数据修改,要么全部执行,要么全部不执行. 2) 一致性(consistency):事务在完成时,必须是所有的数据都保持一致状态.在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性. 3) 隔离性(isolation):一个事务的执行不能被其他事务所影响. 4) 持久性(durability):一个事务一旦提交,事物的操作便永久性的保存在DB中.即

day18(JDBC事务&连接池介绍&DBUtils工具介绍&BaseServlet作用)

day18总结 今日思维导图: 今日内容 事务 连接池 ThreadLocal BaseServlet自定义Servlet父类(只要求会用,不要求会写) DBUtils à commons-dbutils ? 事务 ? 事务的四大特性:ACID: mysql中操作事务 jdbc中操作事务 ? ? ? 事务概述 为了方便演示事务,我们需要创建一个account表: CREATE TABLE account( ????id INT PRIMARY KEY AUTO_INCREMENT, ????NA

【mybatis】完全解读mybatis JDBC事务

前言 本文debug mybatis源码版本:3.2.7 mybatis提供了JDBC和MANAGED两种事务管理,本文主要讨论的是JDBC事务管理方式. 如果对本文理解不够详细,请先看另一篇博文,模拟实现mybatis数据源和事务:<动态代理+ThreadLocal实现数据源及事务管理>. 本文主要讨论的内容:                 1. mybatis JDBC事务的开始.提交.回滚和关闭                 2. mybatis JDBC事务中connection的

CSDN上看到的一篇有关Spring JDBC事务管理的文章(内容比较全) (转)

JDBC事务管理 Spring提供编程式的事务管理(Programmatic transaction manage- ment)与声明式的事务管理(Declarative transaction management),为不同的事务实现提供了一致的编程模型,这节以JDBC事务为例,介绍Spring的事务管理. 5.3.1  Spring对事务的支持 事务是一组原子(Atomic)操作的工作单元,以数据库存取的实例来说,就是一组SQL指令,这一组SQL指令必须全部执行成功,若因为某个原因未全部执行

网络协议 finally{ return问题 注入问题 jdbc注册驱动问题 PreparedStatement 连接池目的 1.2.1DBCP连接池 C3P0连接池 MYSQL两种方式进行实物管理 JDBC事务 DBUtils事务 ThreadLocal 事务特性 并发访问 隔离级别

1.1.1 API详解:注册驱动 DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用 原因有2个: >导致驱动被注册2次. >强烈依赖数据库的驱动jar 解决办法: Class.forName("com.mysql.jdbc.Driver"); 1.1.2 API详解:java.sql.Statement接口: 操作sql语句,并返回相应结果 String sql = "某SQL语句&qu

Java中的事务——JDBC事务和JTA事务

本文来介绍一下J2EE中和事务相关的内容,在阅读本文之前,希望读者对分布式有一定的了解. Java事务的类型有三种:JDBC事务.JTA(Java Transaction API)事务.容器事务. 常见的容器事务如Spring事务,容器事务主要是J2EE应用服务器提供的,容器事务大多是基于JTA完成,这是一个基于JNDI的,相当复杂的API实现.所以本文暂不讨论容器事务.本文主要介绍J2EE开发中两个比较基本的事务:JDBC事务和JTA事务. JDBC事务 JDBC事务,就是在Java中用来控制

【java】对jdbc操作结果简单的映射封装

1. 对jdbc做一个简单的封装,select可以返回一个javabean对象,而不是resultset.主要用了反射.这是我之前写的代码,做了简单的修改. 实现功能:a.对数据库的基本操作 增删改查 b.对查询的单条记录返回一个指定类型的javabean对象,利用java反射,jdbc ResultSet类和ResultSetMetaData类 c. 对查到的结果集返回一个List, 泛型 数据源:用到的 数据库连接池是我自己简单实现的一个连接池:[java]简单实现数据库连接池,主要为了后续