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- ...
随机推荐
- 利用Word发布文章到博客
目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...
- (最短路 SPFA)Invitation Cards -- poj -- 1511
链接: http://poj.org/problem?id=1511 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82829#probl ...
- HRBUST1315 火影忍者之~大战之后 2017-03-06 16:14 54人阅读 评论(0) 收藏
火影忍者之-大战之后 经历了大战的木叶村现在急需重建,人手又少,所以需要尽可能多的接受外来的任务,以赚取报酬,重建村庄,假设你现在是木叶的一名高级忍者,有一大堆的任务等着你来做,但毕竟个人时间有限,所 ...
- 自我介绍和Github初次使用心得
姓名:许洪科 班级:网络工程142 学号:1413042047 爱好:足球 编写过的程序:0 编写过的代码:几乎为0(大多数为网上直接复制的) Github注册过程:. 1:进入Github网站后点击 ...
- Docker在github上的站点
https://github.com/docker (docker在github上的官方地址) https://github.com/dockerfile (docker官方镜像的Dockerfile ...
- jQuery限制文本框的输入长度
jQuery限制文本框输入,包含粘贴. //限制文本框的输入长度 $(function () { $(document).on("keypress", ".txt-val ...
- Python验证实现登陆功能以及用户锁定(文件存储)
废话不多说先交代码(只是一个简单的验证):#!/usr/bin/env python #-*- coding:utf8 -*- # Structured program ‘#’是注释 # Functi ...
- phonegap3.0+HTMLl5 开发 ipad app 总结
忙碌了一段时间,终于完成了手上的这个ipad上的app ,app是用phonegap+ jquery mobile 开发的,不是用原生的objective c开发的.因为app有许多chart的渲染, ...
- Android TextView 嵌套图片及其点击,TextView 部分文字点击,文字多颜色
1. TextView 中嵌套图片的方法 TextView textView... textView.setText("..."); textView.append(Html.fr ...
- jQuery操作标签--样式、文本、属性操作, 文档处理
1.样式 2.文本 3.属性操作 全选,反选效果 4.文档处理 操作标签 一.样式操作 样式类: addClass(); // 添加指定的css类名 removeClass(); //移除指定的css ...