JDBC事务控制
概念
事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。
特性
定义
问题的提出
更新丢失
脏读
不可重复读
解决方案
未授权读取(Read Uncommitted)
授权读取(Read Committed)
可重复读取(Repeatable Read)
序列化(Serializable)
JDBC中事务的使用
conn.setAutoCommit(0);//修改系统非自动提交。 conn.commit();//事务提交 conn.rollback();//事务回滚 SavePoint sp=con.setSavePoint();//设置保存点 conn.rollback(sp);//返回保存点 conn.setTransactionIsolation();//设置隔离级别 conn.getTransactionIsolation();//获取隔离级别
其中隔离级别的设置如下:
//设定事务的隔离级别:con.setTransactionIsolation(Connection.isolationLevel);
四种隔离级别:
con.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);//最底级别:只保证不会读到非法数据,上述3个问题有可能发生
con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); //默认级别:可以防止脏读
con.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);//可以防止脏读和不可重复读取
con.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); //最高级别:防止上述3种情况,事务串行执行
public class SimpleCase{
private static String JDBC_DRIVER = "com.mysql.jdbc.Driver";
private static String DB_URL = "jdbc:mysql://localhost:3306/datebaseclass";
private static String USER = "root";
private static String PASS = "admin";
public static void main(String[] args) throws ClassNotFoundException {
test();
}
public static void test() {
Connection conn = null;
PreparedStatement ptmt = null;
ResultSet rs = null;
try {
//
Class.forName(JDBC_DRIVER);
//
conn = (Connection) DriverManager.getConnection(DB_URL, USER, PASS);
//
conn.setAutoCommit(false);
ptmt = (PreparedStatement) conn
.prepareStatement("update Product set Inventory=Inventory-1 where ProductName = 'bag'");
ptmt.execute();
ptmt = (PreparedStatement) conn
.prepareStatement("INSERT INTO `Order` (buyer, ProductName) VALUES ('Kevin', 'bag')");
ptmt.execute();
conn.commit();
} catch (ClassNotFoundException e) {
// Class没有发现异常
System.out.println(e.toString());
} catch (SQLException e) {
// Class没有发现异常
if (conn != null) {
try {
conn.rollback();
} catch (SQLException e1) {
System.out.println(e.toString());
}
}
System.out.println(e.toString());
} finally {
try {
if (conn != null) {
conn.close();
}
if (ptmt != null) {
ptmt.close();
}
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
System.out.println(e.toString());
}
}
}
}
JDBC事务控制的更多相关文章
- JDBC事务控制管理(转载)
JDBC事务控制管理 转载于 2018年01月26日 15:46:11 1.事务 (1)事务的概念 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. 例如:A——B转帐, ...
- 分层架构下的纯JDBC事务控制简单解决方案【转】
http://blog.csdn.net/qjyong/article/details/5464835 对目前的JavaEE企业应用开发来说,基本都会采用分层的架构, 这样可以分散关注.松散耦合.逻辑 ...
- JDBC 事务控制
一.简介: 前面一遍提到了jdbc事务相关的概念.从中了解到事务应具有ACID特性.所以对于javaweb开发来说,某一个service层的方法,应该是一个事务,应该是具有原子性的.特别是当一个ser ...
- JDBC事务控制管理
1.事务 (1)事务的概念 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. 例如:A——B转帐,对应于如下两条sql语句 update account set mone ...
- 事务和JDBC事务隔离级别
与事务相关的理论 mysql事物隔离级别:http://mj4d.iteye.com/blog/1744276 事务(Transaction): 是并发控制的单元,是用户定义的一个操作序列.这些操作要 ...
- jdbc事务、连接池概念、c3p0、Driud、JDBC Template、DBUtils
JDBC 事务控制 什么是事务:一个包含多个步骤或者业务操作.如果这个业务或者多个步骤被事务管理,则这多个步骤要么同时成功,要么回滚(多个步骤同时执行失败),这多个步骤是一个整体,不可分割的. 操作: ...
- spring入门(三)【事务控制】
在开发中需要操作数据库,进行增.删.改操作的过程中属于一次操作,如果在一个业务中需要更新多张表,那么任意一张表的更新失败,整个业务的更新就是失败,这时那些更新成功的表必须回滚,否则业务会出错,这时就要 ...
- JTA和JDBC事务
一般情况下,J2EE应用服务器支持JDBC事务.JTA事务.容器管理事务.这里讨论JTA和JDBC事务的区别.这2个是常用的DAO模式事务界定方式.JDBC 事务 JDBC 事务是用 Connecti ...
- Spring中的Jdbc事务管理
Spring提供了对事务的声明式事务管理,只需要在配置文件中做一些配置,即可把操作纳入到事务管理当中,解除了和代码的耦合. Spring声明式事务管理,核心实现就是基于Aop. Spring声明式事务 ...
随机推荐
- BZOJ_3675_[Apio2014]序列分割_斜率优化
BZOJ_3675_[Apio2014]序列分割_斜率优化 Description 小H最近迷上了一个分隔序列的游戏.在这个游戏里,小H需要将一个长度为n的非负整数序列分割成k+1个非空的子序列.为了 ...
- BZOJ_3196_Tyvj 1730 二逼平衡树_树状数组套主席树
BZOJ_3196_Tyvj 1730 二逼平衡树_树状数组套主席树 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排 ...
- NOIP2017 酱油送命记
Day0 一天,在机房,有点考前的紧张和慌张,打了一下午的模板,立了3个不该立的flag... Day1 拿到试题,万分紧张,T1是数论啊 害怕,一直以为D2T1才是数论,仔细观察却发现(flag1: ...
- Ceilometer + Aodh + Gnocchi 介绍
一. Ceilometer 1. 概述 Openstack ceilometer主要用于监控虚拟机.服务(glance.image.network等)和事件.虚拟机的监控项主要包括CPU.磁盘 ...
- sudo apt-get update: 0% [正在等待报头]
问题描述:使用apt-get下载一个文件,由于下载的太慢,使用Ctrl+C强制结束.然后输入sudo apt-get update,想继续下载其他文件.结果出现如标题所示的错误,截图如下:按照网上说的 ...
- RabbitMQ指南之一:"Hello World!"
为什么要使用MQ消息中间件?它解决了什么问题?关于为什么要使用消息中间件?消息中间件是如何做到同步变异步.流量削锋.应用解耦的?网上已经有很多说明,我这里就不再说明了,读者可以参考(https://w ...
- FreemarkerJavaDemo【Android将表单数据生成Word文档的方案之一(基于freemarker2.3.28,只能java生成)】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个方案只能在java中运行,无法在Android项目中运行.所以此方案是:APP将表单数据发送给后台,后台通过freemarker ...
- 网络协议 22 - RPC 协议(下)- 二进制类 RPC 协议
前面我们认识了两个常用文本类的 RPC 协议,对于陌生人之间的沟通,用 NBA.CBA 这样的缩略语,会使得协议约定非常不方便. 在讲 CDN 和 DNS 的时候,我们讲过接入层的设计 ...
- slice是什么时候决定要扩张?
slice是什么时候决定要扩张? 网上说slice的文章已经很多了,大都已经把slice的内存扩张原理都说清楚了.但是是如何判断slice是否需要扩张这个点却没有说的很清楚.想当然的我会觉得这个app ...
- 运用《深入理解Java虚拟机》书中知识解决实际问题
前言 以前看别人博客说看完<深入理解Java虚拟机>这本书并没有让自己的编程水平提高多少,不过却大大提高了自己的装逼水平.其实,我倒不这么认为,至少在我看完一遍这本书后,有一种醍醐灌顶的感 ...