JDBC处理Transaction
package com.ayang.jdbc; import java.sql.*;
/**
* transaction的构成,随便写一句insenrt,一执行executeUpdate(),它自动提交。
* 下边例子有三条update语句,假设第一条是updateA账户上的钱完了,自动提交,这时候出错了,B账户上的钱没update,这时候会出现数据不一致的问题。
* 解决办法很简单,把它放在一个transtraction里去,要么两条同时完成,要么都不完成。
* 任何一条DML语句会自动提交,因为在整个数据库连接里,有一个属性:AutoCommit();默认为值true,会自动提交。要想把某些语句放在一个transaction里,
* 把AutoCommit(false);设为false,手动提交:最后执行conn.commit();然后恢复AutoCommit()为true.
* 如果catch到任何SQLException,首先进行conn.rollback();然后conn.setAutoCommit(true);确保万无一失。
*/ public class TestTransaction { public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:ORCL","scott","root"); conn.setAutoCommit(false);
stmt = conn.createStatement();
stmt.addBatch("insert into dept2 values(60,'CPU','XUCHANG')");
stmt.addBatch("insert into dept2 values(61,'CPU','XUCHANG')");
stmt.addBatch("insert into dept2 values(62,'CPU','XUCHANG')");
stmt.executeBatch();
conn.commit();
conn.setAutoCommit(true); } catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace(); try {
if(conn != null){
conn.rollback(); //有异常时回滚。
conn.setAutoCommit(true); }
}catch (SQLException e1) {
e1.printStackTrace();
}finally{
try{
if(conn!=null){
conn.close();
}if(stmt!=null){
stmt.close();
}
}catch (SQLException e1) {
e1.printStackTrace();
}
}
} } }
自动提交效果对比,能插入前两条记录(第三条sql语句缺失into)第三条sql不会执行。
//conn.setAutoCommit(false);
stmt = conn.createStatement();
stmt.addBatch("insert into dept2 values(60,'CPU','XUCHANG')");
stmt.addBatch("insert into dept2 values(61,'CPU','XUCHANG')");
stmt.addBatch("insert dept2 values(62,'CPU','XUCHANG')");
stmt.executeBatch();
conn.commit();
//conn.setAutoCommit(true);
JDBC处理Transaction的更多相关文章
- spring+jdbc+template+transaction实现
使用spring和jdbc模板事务实现 1.创建实体类: Role package com.wbg.sjt.entity; public class Role { private int id; pr ...
- java当中JDBC当中的transaction例子
[学习笔记] 7.jdbc的transaction例子: import java.sql.*; public class MySQlTransaction1 { public static void ...
- Hibernate Session & Transaction详解
Hibernate Session & Transaction详解 HIbernate中的Session Session是JAVA应用程序和Hibernate进行交互时使用的主要接口,它也是持 ...
- [springboot jpa] [bug] Could not open JPA EntityManager for transaction
前言 最近,测试环境遇到了一个问题.经过一番百度加谷歌,终于解决了这个问题.写下这篇博客是为了记录下解决过程,以便以后查看.也希望可以帮助更多的人. 环境 java版本:8 框架:spring clo ...
- Spring事务管理器的应对
Spring抽象的DAO体系兼容多种数据访问技术,它们各有特色,各有千秋.像Hibernate是非常优秀的ORM实现方案,但对底层SQL的控制不太方便:而iBatis则通过模板化技术让你方便地控制SQ ...
- 分析Hibernate的事务处理机制
Hibernate是对JDBC的轻量级对象封装,Hibernate本身是不具备Transaction处理功能的,Hibernate的 Transaction实际上是底层的JDBC Transactio ...
- atomikos的Jta配置
配置说明见: http://www.atomikos.com/Documentation/JtaProperties atomikos的一些配置,文档中说明的比较清楚,有两个属性配置不太明确:com. ...
- 使用c3p0与DBCP连接池,造成的MySql 8小时问题解决方案
转自:http://blog.csdn.net/wangfayinn/article/details/24623575 c3p0数据库连接池mysql8小时 目录(?)[-] 基本问题解决 项目环境 ...
- Java事务管理之Hibernate
环境与版本 Hibernate 版本:Hibernate 4.2.2 (下载后的文件名为hibernate-release-4.2.2.Final.zip,解压目录hibernate-release- ...
随机推荐
- VS2017设置默认管理员权限启动
找到vs安装目录下的:C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\devenv.exe 右键- ...
- .NET基础 (12)时间的操作System.DateTime
时间的操作System.DateTime1 DateTime如何存储时间2 如何在DateTime对象和字符串对象之间进行转换3 什么是UTC时间,如何转换到UTC时间 时间的操作System.Dat ...
- windows7 不能更新,提示:"WindowsUpdate_80240016" "WindowsUpdate_dt000",如何解决?
计算机(右键) ---- 管理 -------- 服务和应用程序 -----服务(找到名称为windows update的服务,并且在windwos update服务右键 选择重新启动 ) 再次安装更 ...
- awk基础04-内置函数
在awk中常用的内置函数大概分为:数值函数.字符函数.时间函数.二进制操作函数.数组函数.自定义函数等. 数值函数 常用的数值函数主要有int.rand.srand.sqrt等.详细如下所 ...
- MSP430 G2553 比较器Comparator_A+、数据流程图DFD、状态转换图STD
一.CA+构造 MSP430G2553带有一个比较器Comparator_A+(CA+),其构造框图如下图所示. 二.输入 & 输出 如上图所示,比较器有一个同向输入端(V+)和一个反向输入端 ...
- TSQL--TOP选项
TOP选项需要依据ORDER来选取记录,可以依据行数和百分比来选取记录 按照行数来选取10行记录 SELECT TOP(10) * FROM T1 ORDER BY ID 按照行数来选取10%的记录 ...
- androidstudio提示adb错误:cannot parse version string:kg01的解决方法
打开adb.exe的文件目录,同时按下shift和鼠标右键,打开cmd后运行一下这个命令adb kill-server
- 【文文殿下】对后缀自动机(SAM)的理解
后缀自动机,是一种数据结构,是由状态和转移关系构成的.它虽然叫做后缀自动机,可是他却与后缀并没有什么太大的联系. 后缀自动机的每一种状态都是原串的一些子串的集合,每个子串只唯一存在于某个状态中,对每一 ...
- 在myeclipse中有的项目上有个红色感叹号
之前做项目的时候遇到过这个问题,最后确定原因是项目引用了很多放在D盘或E盘上的jar包,但是我们不小心把这些jar包删除或移动路径了,因此myeclipse识别不了出现红色的感叹号,解决方式是在mye ...
- Linux 解压 压缩文件
来源于:http://blog.csdn.net/mmllkkjj/article/details/6768294/ 解压 tar –xvf file.tar //解压 tar包tar -xzvf f ...