JDBC--处理事务
1、事务是指一组逻辑操作单元,使数据从一种状态转换到另一种状态。
2、事务的四个属性:
--1)原子性:事务是一个不可分割的工作单位,事务中的操作要么都发生要么都不发生;
--2)一致性:事务必须是数据库从一个一致性状态变换到另外一个一致性状态
--3)隔离性:事务的执行不能被其他事务干扰,即一个事务内的操作及使用的数据对并发的其他事物是隔离的,并发执行的各个事务之间不能相互干扰;
--4)持久性:事务一旦被提交,他对数据库中数据的改变是永久性的。
3、使用JDBC操作数据库时,为了防止程序出现异常导致有些sql语句被执行而另外一些sql语句未执行,违反一致性,就需要使用事务来操作数据库,一旦发生异常,但是若没有提交(commit),则数据库仍可回滚到异常发生之前的状态;
4、使用事务时必须保证所有操作使用同一个连接(Connection),同时由于JDBC操作数据库时会为每一次操作自动提交(commit),因此要想正常使用事务,在操作之前需要使用Connection的setAutoCommit(false)方法,来关闭自动提交,当操作完之后再使用Connection的commit()方法手动提交;若出现异常,则可以使用其rollback()方法回滚事务。
5、编程实例:
public void testTransaction(){
DAO dao = new DAO();
Connection conn = null;
try{
//获取连接
conn = JDBCUtils.getConnection();
//关闭自动提交
conn.setAutoCommit(false);
//进行第一次数据操作
String sql1 = "UPDATE accounts SET SALARY = SALARY - 500 WHERE id = 1";
dao.update(conn, sql1); //模拟异常发生
int a = 10 / 0; //进行第二次数据操作
String sql2 = "UPDATE accounts SET SALARY = SALARY + 500 WHERE id = 2";
dao.update(conn, sql2);
//提交事务
conn.commit();
}catch(Exception e){
//若出现异常,则回滚事务
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
}finally{
if(conn != null){
//关闭数据库连接
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
6、数据库的隔离级别:对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题:
--读脏数据:对于两个事务T1,T2,T1读取了已经被T2更新但没有提交的字段之后,若T2回滚,T1读取的内容就是无效的;
--不可重复读:对于两个事务T1,T2,T1读取了一个字段,然后T2更新了该字段之后,T1再次读取该字段时值与第一次读取不同;
--幻读:对于两个事务T1,T2,T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行之后,如果T1再次读取同一个表,就会读取多出的几行。
7、为了防止出现上面的问题,数据库系统必须具有隔离并发运行各个事务的能力。使它们不会相互影响,避免各种并发问题;
8、一个事务与其他事务隔离的程度称为隔离级别。数据库规定了多种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性就越好,但并发性越弱;
9、四种隔离级别:
--1)READ UNCOMMITTED:读未提交数据
--2)READ COMMITED:读已提交数据
--3)REPEATABLE READ:可重复读
--4)SERIALIZABLE:串行化
--Oracle只支持1)、4)两种级别,默认为1)级别
10、在JDBC中可以使用Connection的setTransactionIsolation(int level)方法来设置隔离级别。其参数有Connection.TRANSACTION_READ_UNCOMMITTED、Connection.TRANSACTION_READ_COMMITED、Connection.TRANSACTION_REPEATABLE_READ、Connection.TRANSACTION_SERIALIZABLE和Connection.TRANSACTION_NONE五种。
JDBC--处理事务的更多相关文章
- Spring总结——AOP、JDBC和事务的总结
1.上一次总结了 Spring 的核心三大组件(Core,Beans,Context),今天总结的 AOP.JDBC和事务都可以看成是核心三大组件的应用. 其中 Spring 的事务管理又以 AOP ...
- 【JDBC】事务的使用
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5868750.html 关于事务的理论知识.ACID特性等等,网上太多了,在此不一一重复.本文主要着重 事务 ...
- MySql事务及JDBC对事务的使用
一 .事务的几个重要特性 1. 原子性 事务内的每个内容不可分割,是一个统一的整体.或同时进行或同时消亡. 2.一致性 事务执行前和事务执行后,状态都是统一的.如A转B 100元,A和B数据总额度没有 ...
- JDBC 之 事务
1.概念:事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功. 2.数据库开启事务的命令dtl: Start transaction开启事务 Rollback回滚事务(撤销) ...
- JDBC之事务隔离级别以及ACID特性
JDBC之事务隔离级别以及ACID特性 事务隔离级别: 1.更新遗失(Lost update) 两个事务都同时更新一行数据,但是第二个事务却中途失败退出,导致对数据的两个修改都失效了.这是因为系统没有 ...
- 事务之使用JDBC进行事务的操作2
本篇将讲诉如何使用JDBC进行数据库有关事务的操作.在上一篇博客中已经介绍了事务的概念,和在MySQL命令行窗口进行开启事务,提交事务以及回滚事务的操作. 似乎事务和批处理都可以一次同时执行多条SQL ...
- JDBC控制事务
概念 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit).事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并 ...
- JDBC进行事务管理
JDBC进行事务管理 事务的四个特征:原子性 : 是指事务中包含的操作都被看做是一个逻辑单元一致性: 开始前和结束后数据库都处于一致性状态隔离性: 对数据库修改的多个事务是彼此隔离的持久性 事务完成之 ...
- JDBC处理事务
一.什么是事务? 在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务! 二.事务是必须满足4个条件(AC ...
- Java -- JDBC 事务处理, 事务的隔离级别 脏读 不可重复读 等...
1. 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. 数据库开启事务命令 •start transaction 开启事务 •Rollback 回滚事务 •Commit ...
随机推荐
- tkinter学习(3)scale尺度条和menu菜单
1.scale学习(尺度条)1.1 代码: #第1步:导出模块 import tkinter as tk #第2步:定义窗口,及其标题.大小和位置 win = tk.Tk() win.title('s ...
- Android Studio 配置Gradle
一, 问题:①换个新电脑安装完Android Sutdio第一次打开一个工程巨慢怎么办?② 手动配置Gradle Home为什么总是无效?③ 明明已经下载了Gradle,配置了gradle home, ...
- Java并发编程(四):并发容器(转)
解决并发情况下的容器线程安全问题的.给多线程环境准备一个线程安全的容器对象. 线程安全的容器对象: Vector, Hashtable.线程安全容器对象,都是使用 synchronized 方法实现的 ...
- 计算机基础 - 时间戳(timestamp)位数
分为10位数字(ten digit)和13位(thirteen digit)数字 1. Unix, Python为10 time +%s import time time.time() 2. Java ...
- Java8新特性——Optional
前言 在开发中,我们常常需要对一个引用进行判空以防止空指针异常的出现.Java8引入了Optional类,为的就是优雅地处理判空等问题.现在也有很多类库在使用Optional封装返回值,比如Sprin ...
- 使用SQL语句还原数据库 2012.3.20
--返回由备份集内包含的数据库和日志文件列表组成的结果集. --主要获得逻辑文件名 USE master RESTORE FILELISTONLY FROM DISK = 'g:\back.Bak' ...
- SSH项目Dao层和Service层及Action的重用
泛型 1.泛型的定义 1.泛型是一种类型 1.关于Type //是一个标示接口,该标示接口描述的意义是代表所有的类型 public interface Typ ...
- 二十一 Struts的数据校验两种方式:手动编码和xml校验
数据的校验: 一.前台校验:JS校验 JS的校验不是必须的,JS可以被绕行,可以提升用户体验 二.后台校验:编码校验 必须的校验 三.校验的方式: 手动编码(不建议使用) 配置文件(支持) 手动编码的 ...
- 科普:为什么 String hashCode 方法选择数字31作为乘子
作者:coolblog 此文章转载自:https://segmentfault.com/a/1190000010799123 1. 背景 某天,我在写代码的时候,无意中点开了 String hashC ...
- Ubuntu12.04LTS中安装和使用Spin
https://blog.csdn.net/jackandsnow/article/details/94434481 把第三步 安装tk(在wish中):apt-get install wish 改为 ...