JDBC进行事务管理
JDBC进行事务管理
事务的四个特征:
原子性 : 是指事务中包含的操作都被看做是一个逻辑单元
一致性: 开始前和结束后数据库都处于一致性状态
隔离性: 对数据库修改的多个事务是彼此隔离的
持久性 事务完成之后对系统的影响是永久的
现举一个例子:有两张表,一张是user表,一张是地址表,user表和address表通过user_id关联。现在我要插入一个人的信息,需要向两个表中插入数据,如下:
insert into tbl_user(id,name,password,email)
values(10,'xiongda','','xiongda@qq.com')
insert into tbl_address(id,city,country,user_id)
values(1,'hangzhou','china',10)
现在存在一个问题时,第二条语句的id与表中其他数据重复,存在了主键冲突。如果不加上事务管理,那么就只能导致user表插入了数据,但是address表就不能插入数据。
我们把这两个表的插入操作看作是一个事务,这也就破坏了事务的一致性。
所以我们要做到,要么都插入,要么都不插入,也就是满足事务的原子性。
JDBC中实现事务管理的代码如下:
public class TransactionTest {
public static Connection getConnection(){
Connection conn=null;
try {
Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
conn=(Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useSSL=FALSE&serverTimezone=UTC","root","xb199795");
} catch (InstantiationException | IllegalAccessException | ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public static void insertUser(Connection conn) throws SQLException {
String sql="insert into tbl_user(id,name,password,email)"+
"values(10,'xiongda','123','xiongda@qq.com')";
Statement st=conn.createStatement();
int count=st.executeUpdate(sql);
System.out.println("向用户表插入了"+count+"条记录!");
}
public static void insertAddress(Connection conn) throws SQLException {
String sql="insert into tbl_address(id,city,country,user_id)"+
"values(1,'hangzhou','china',10)";
Statement st=conn.createStatement();
int count=st.executeUpdate(sql);
System.out.println("向地址表插入了"+count+"条记录!");
}
public static void main(String[] args) {
Connection conn =getConnection();
try {
conn.setAutoCommit(false);
insertUser(conn);
insertAddress(conn);
conn.commit();
} catch (SQLException e) {
System.out.println("************事务处理出现异常***********");
e.printStackTrace();
try {
conn.rollback();
System.out.println("*********事务回滚成功***********");
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}finally {
try {
conn.close();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
}


user表中也没有新增数据。
JDBC进行事务管理的更多相关文章
- 4-9 基于Spring JDBC的事务管理(续)
10. 基于Spring JDBC的事务管理(续) 当需要方法是事务性的,可以使用@Transactional注解,此注解可以添加在: 接口 会使得此接口的实现类的所有实现方法都是事务性的 接口中的抽 ...
- [疯狂Java]JDBC:事务管理、中间点、批量更新
1. 数据库事务的概念: 1) 事务的目的就是为了保证数据库中数据的完整性. 2) 设想一个银行转账的过程,假设分两步,第一步是A的账户-1000,第二步是B的账户+1000.这两个动 ...
- Spring框架——JDBC与事务管理
JDBC JDBCTemplate简介 XML配置JDBCTemplate 简化JDBC模板查询 事务管理 事务简介 Spring中的事务管理器 Spring中的事务管理器的不同实现 用事务通知声明式 ...
- JDBC、JTA、Spring的事务管理
Java事务的类型有三种:JDBC事务.JTA(Java Transaction API)事务.容器事务. 事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么 ...
- Java数据库连接——JDBC调用存储过程,事务管理和高级应用
一.JDBC常用的API深入详解及存储过程的调用 相关链接:Jdbc调用存储过程 1.存储过程(Stored Procedure)的介绍 我们常用的操作数据库语言SQL语句在执行的时候需要先编译,然后 ...
- CSDN上看到的一篇有关Spring JDBC事务管理的文章(内容比较全) (转)
JDBC事务管理 Spring提供编程式的事务管理(Programmatic transaction manage- ment)与声明式的事务管理(Declarative transaction ma ...
- Java数据库连接--JDBC调用存储过程,事务管理和高级应用
相关链接:Jdbc调用存储过程 一.JDBC常用的API深入详解及存储过程的调用 1.存储过程的介绍 我们常用的操作数据库语言SQL语句在执行的时候要先进行编译,然后执行,而存储过程是在大型数据库系统 ...
- 春天JDBC事务管理
JDBC事务管理 春天提供编程式的事务管理(编程式事务管理)与声明式的事务管理(声明式事务management),为不同的事务实现提供了一致的编程模型,这节以JDBC事务为例,介绍Spring的事务管 ...
- Hibernate 事务管理
一. 事务包含四个基本特性:简称ACID: 1. Atomic(原子性):全部成功或全部失败: 2. Consistency(一致性):只有合法数据才能被写入,不合法则回滚到最初状态: 3. Isol ...
随机推荐
- dfs找負環
某些無良出題人可能會卡bfs找負環,所以要用dfs 核心代碼(以jzoj5173為例): #include<bits/stdc++.h> using namespace std; #def ...
- iOS-电池图标【结合贝塞尔曲线控制电量显示】
基于UIView类:WKJBatteryView WKJBatteryView.h #import <UIKit/UIKit.h> @interface WKJBatteryView : ...
- css实现栏目两边斜线的效果
实现效果: 具体实现代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- OpenCV --- 修改图像的对比度、亮度 、RGB转Gray图像、修改图像的尺寸
#include <opencv2/core.hpp> #include <opencv2/imgcodecs.hpp> #include <opencv2/highgu ...
- CPM(Cluster Percolation method)派系过滤算法
一.概念 (1)完全子图/全耦合网络/k-派系:所有节点全部两两相连 图1 这些全耦合网络也成为派系,k-派系表示该全耦合网络的节点数目为k 1)k-派系相邻:两个不同的k-派系共享k-1个节点,认为 ...
- zabbix 自定义 key (转)
转自:http://www.cnblogs.com/miclesvic/p/6164303.html 1.在zabbix_agent端zabbix_agentd.conf配置文件中增加自定义Key(/ ...
- Linux awk命令详解[备份]
简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...
- Maven-pom.xml文件报错 Plugin execution not covered by lifecycle configuration
问题: Eclipse中新导入的项目pom.xml文件报错: Plugin execution not covered by lifecycle configuration: org.jacoco:j ...
- 软件魔方制作系统启动盘并安装win7系统
不多说,直接上干货! 推荐软件:软件魔方 http://mofang.ruanmei.com/ 这里,我想说的是,这个软件来制作系统盘,是真的方便和好处多多.具体我不多说,本人也是用过其他的如大白菜等 ...
- mysql数据库修改字符编码问题
遇到这种情况,现有项目的数据库已经建好,数据表也已经创建完成. 问题来的,数据库不能插入中文,调试时候发现中文数据从发送请求到最后请求处理完成这些步骤,中文还没有发生乱码. 只有在存储到数据库后查询数 ...