JDBC事务与保存点 JDBC简介(七)
事务简介
- 事务的原子性( Atomicity):一组事务,要么全部成功;要么全部失败。
- 一致性 (Consistency):事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。比如一个学生表中新插入了一条记录,这个学生的class_id必须是一个已经存在的正确的,A账户向B账户转账,不能出现负数,如果不做任何保障,出现了负数,这就是破坏了一致性可以认为是一致性表示数据本来是正确的,经过了事务,转换为了另外的一个状态,仍旧是正确的。
- 隔离性(Isolation):由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。也就是说另一并发事务要么读取的是事务前的状态,要么是事务后的状态,不会是这个事务的中间状态。
- 持久性(Durability):事务完成之后,它对于系统的影响是永久性的。该修改即使出现致命的系统故障也将一直保持。
- setAutoCommit(boolean):设置是否为自动提交事务,如果true(默认值为true)表示自动提交,也就是每条执行的SQL语句都是一个单独的事务;如果设置为false,那么相当于开启了事务,con.setAutoCommit(false) 表示开启事务。
- commit():提交结束事务。
- rollback():回滚结束事务。
- setSavepoint():设置保存点。
事务使用示例
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class MyTransactional {
public static void main(String[] args) throws Exception{
String user = "root";
String password = "123456";
String url = "jdbc:mysql://localhost:3306/sampledb?useUnicode=true&characterEncoding=utf-8";
//2、获取连接对象
Connection conn = DriverManager.getConnection(url, user, password);
String sql = "delete from student where id='59'";
//2、获得sql语句执行对象
Statement stmt = conn.createStatement();
conn.setAutoCommit(false);
//3、执行并保存结果集
int rows = stmt.executeUpdate(sql);
System.out.println("受影响的行: "+rows);
conn.commit();
// conn.rollback();
conn.close();
stmt.close();
}
}
stmt.executeUpdate(sql);
conn.setAutoCommit(false);
conn.rollback();
try {
con = DBConnection.getConnection();
//开启事务
con.setAutoCommit(false); //处理业务逻辑 //提交事务
con.commit();
}
catch (SQLException e) {
e.printStackTrace();
//出现异常,回滚事务
try {
con.rollback();
System.out.println("JDBC Transaction rolled back successfully");
}
catch (SQLException e1) {
System.out.println("SQLException in rollback" + e.getMessage());
}
}
保存点
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Savepoint;
import java.sql.Statement;
public class MyTransactional {
public static void main(String[] args) throws Exception{
String user = "root";
String password = "123456";
String url = "jdbc:mysql://localhost:3306/sampledb?useUnicode=true&characterEncoding=utf-8";
//2、获取连接对象
Connection conn = DriverManager.getConnection(url, user, password);
conn.setAutoCommit(false);
String sql1 = "delete from student where id='158'";
String sql2 = "delete from student where id='159'";
//2、获得sql语句执行对象
Statement stmt = conn.createStatement();
//3、执行并保存结果集
stmt.executeUpdate(sql1);
Savepoint savepoint1 = conn.setSavepoint("savepoint1");
stmt.executeUpdate(sql2);
Savepoint savepoint2 = conn.setSavepoint("savepoint2");
conn.rollback(savepoint1);
conn.commit();
// conn.rollback();
conn.close();
stmt.close();
}
}


JDBC事务与保存点 JDBC简介(七)的更多相关文章
- day18(JDBC事务&连接池介绍&DBUtils工具介绍&BaseServlet作用)
day18总结 今日思维导图: 今日内容 事务 连接池 ThreadLocal BaseServlet自定义Servlet父类(只要求会用,不要求会写) DBUtils à commons-dbuti ...
- Spring 中的 JDBC 事务
Spring 对 JDBC 的支持 JdbcTemplate 简介 •为了使 JDBC 更加易于使用, Spring 在 JDBC API 上定义了一个抽象层, 以此建立一个 JDBC 存取框架. • ...
- JDBC 事务控制
一.简介: 前面一遍提到了jdbc事务相关的概念.从中了解到事务应具有ACID特性.所以对于javaweb开发来说,某一个service层的方法,应该是一个事务,应该是具有原子性的.特别是当一个ser ...
- Java的JDBC事务详解(转)
事务的特性: 1) 原子性(atomicity):事务是数据库的逻辑工作单位,而且是必须是原子工作单位,对于其数据修改,要么全部执行,要么全部不执行. 2) 一致性(consistency):事务在完 ...
- JDBC事务和JTA事务的区别
转自:JDBC和JTA事务的区别 一.事务概述事务表示一个由一系列的数据库操作组成的不可分割的逻辑单位,其中的操作要么全做要么全都不做.与事务相关的操作主要有:BEGIN TRANSACTION: 开 ...
- Java的JDBC事务详解
Java的JDBC事务详解 分类: Hibernate 2010-06-02 10:04 12298人阅读 评论(9) ...
- 数据库事务的四大特性以及4种事务的隔离级别-以及对应的5种JDBC事务隔离级别
本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务 ...
- JDBC事务和JTA (XA)事务区别
JDBC 事务 JDBC 事务是用 Connection 对象控制的.JDBC Connection 接口( java.sql.Connection )提供了两种事务模式:自动提交和手工提交. 在jd ...
- JDBC事务和数据库事务嵌套的讨论 .
首先必须执行con.setAutoCommit(false)方法,将JDBC事务设置为手动提交,否则手动提交con.commit()无效,手动回滚con.rollback()引发SQLExceptio ...
随机推荐
- eclipse中生成的html存在中文乱码问题的解决方法
最近在做测试报告生成时遇到了个中文乱码的问题,虽然在html创建过程中设置了编码格式htmlReporter.config().setEncoding("UTF-8");但是生成的 ...
- python-简单邮件报警
在scrapy爬虫项目中经常遇到 爬取数据时报错无法及时处理 导致数据爬取不完整 只能先查看log才能发现报错 首先写一个简单的邮件发送模块 """ @file: ema ...
- spring boot 集成 Redis
前提:你已经安装了Redis 1.创建一个spring boot 工程 2.pom 引入依赖:spring-boot-starter-data-redis <dependency> < ...
- mysql数据库连接异常问题(总结)
mysql数据库连接异常问题(总结) 1.1 前言 最近项目由1个数据源增加至了3个数据源(连接池使用C3P0),结果各种奇葩的数据库连接问题接踵而至,为防止将来再次遇到同样的问题不犯同样错误,现 ...
- ABP入门系列(17)——使用ABP集成的邮件系统发送邮件
ABP中对邮件的封装主要集成在Abp.Net.Mail和Abp.Net.Mail.Smtp命名空间下,相应源码在此. #一.Abp集成的邮件模块是如何实现的 分析可以看出主要由以下几个核心类组成: E ...
- [Swift]LeetCode692. 前K个高频单词 | Top K Frequent Words
Given a non-empty list of words, return the k most frequent elements. Your answer should be sorted b ...
- Java常用工具类练习题
1.请根据控制台输入的特定日期格式拆分日期 如:请输入一个日期(格式如:**月**日****年) 经过处理得到:****年**月**日 提示:使用String的方法indexOf.lastIndexO ...
- linux运维架构师职业规划
1.假如你从来未接触过Linux的话,首先要做的就找一本指导书来学习.现在公认的Linux的入门书籍是“鸟哥的私房菜”,讲的很全面,鸟哥的私房菜一共分为两部,一部是基础篇,一部是服务器篇.“鸟哥的私房 ...
- Python档案袋( 面向对象 )
类即是一个模型,根据模型建立起不同的对象,对象间拥有共同的一些属性 简单的类: class P: #类变量,所有实例共享变量,推荐使用方法是:类名.类变量名 pvarx="ppvar1&qu ...
- java多线程(6)---ThreadLocal
ThreadLocal 什么是ThreadLocal? 顾名思义它是local variable(线程局部变量).它的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可 ...