简单事务的回滚

设置conn的setAutoCommit方法参数false 调用conn.commit()方法 随后在捕获异常后在catch段里添加coon.rollback()方法

 1 package com.iwb.jdbc;
 2
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.SQLException;
 6 import java.sql.Statement;
 7
 8 public class TransactionTest {
 9     public static Connection getConnection(){
10         Connection conn=null;
11         String url="jdbc:mysql://localhost:3306/bbs_user?"
12                 +"user=root&password=123456&useUnicode=true&characterEncoding=UTF8";
13         try {
14             Class.forName("com.mysql.jdbc.Driver");
15             conn= DriverManager.getConnection(url);
16         } catch (Exception e) {
17             // TODO: handle exception
18             e.printStackTrace();
19         }
20         return conn;
21     }
22     public static void insertUserData(Connection conn) throws SQLException{
23
24             String sql="insert into bbs_user(id,username,password,gender,email,birthdate) "
25                     + "values(10,‘yangyang‘,‘lili‘,1,‘[email protected]‘,‘1995-09-09‘)";
26             Statement st=conn.createStatement();
27             int count = st.executeUpdate(sql);
28             System.out.println("charu"+count+"tiao xinxi");
29
30     }
31     public static void insertAddressData(Connection conn) throws SQLException{
32
33             String sql="insert into bbs_messages(id,author,info,published)" +
34                         "values(10,6,‘sssddddddddddddd‘,‘1998-09-09‘)";
35             Statement st=conn.createStatement();
36             int count = st.executeUpdate(sql);
37             System.out.println("charu"+count+"tiao xinxi");
38
39     }
40     public static void main(String[] args) {
41         Connection conn=null;
42         try {
43             conn=getConnection();
44             conn.setAutoCommit(false);
45             insertUserData(conn);
46             insertAddressData(conn);
47
48             conn.commit();
49         } catch (SQLException e) {
50             // TODO Auto-generated catch block
51             System.out.println("yichang");
52             e.printStackTrace();
53             try {
54                 conn.rollback();
55                 System.out.println("huigun");
56             } catch (Exception e2) {
57                 // TODO: handle exception
58             }
59         }finally{
60             try {
61                 if(conn!=null){
62                     conn.close();
63                 }
64             } catch (Exception e2) {
65                 // TODO: handle exception
66                 e2.printStackTrace();
67             }
68         }
69     }
70 }

时间: 2024-10-08 03:00:39

简单事务的回滚的相关文章

JDBC PreparedStatement ,CallableStatement,以及事务,回滚举例

程序中用到的类,文件,jar 代码: 1,文件:db.properties文件内容 user=rootpassword=123url=jdbc:mysql:///student_dbdriver=com.mysql.jdbc.Driveraaa 2,类Utils.class import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException

SpringMVC+Ibatis事务不回滚的问题

在使用SpringMvc的时候,大多数人都会遇到事务不回滚的问题.其实事务在Spring里面使用起来很简单,只要配置正确了,知识一个标签的事. 下面我就给大家说一下我是怎么解决这个问题的. 一.配置扫描标签时 <!-- springmvc的配置文件中不扫描带有@Service注解的类 --> <context:component-scan base-package="com.dds"> <context:exclude-filter type="

MySql事务无法回滚的原因

使用MySQL时,如果发现事务无法回滚,但Hibernate.Spring.JDBC等配置又没有明显问题时,不要苦恼,先看看MySQL创建的表有没有问题,即表的类型. InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能. MyIASM是I

代码配置都没问题,为什么事务不回滚(了解Mysql数据库引擎)

前几天开发中遇到了一个问题,在进行调试的过程中发现配置在service层的事务不起作用,抛出异常后数据库的更新还是成功了,事务并没有回滚,然后就开始各种检查,查看spring的事务是否配置正确,进入更新方法时是否开启了事务,经过检查之后发现一切都正常,那为什么事务不回滚呢?问题出在了一个很难会去考虑的地方(数据库里创建的表不支持事务). Mysql数据库默认的创建表的引擎是:MYISAM,使用这种引擎的表效率高,但是不支持事务,所以我们在建表时最好是根据需求手动去指定我们需要的引擎,下面是一个能

Spring事务异常回滚,捕获异常不抛出就不会回滚(转载) 解决了我一年前的问题

最近遇到了事务不回滚的情况,我还考虑说JPA的事务有bug? 我想多了.......    为了打印清楚日志,很多方法我都加tyr catch,在catch中打印日志.但是这边情况来了,当这个方法异常时候 日志是打印了,但是加的事务却没有回滚. 例:     类似这样的方法不会回滚 (一个方法出错,另一个方法不会回滚) : if(userSave){ try { userDao.save(user); userCapabilityQuotaDao.save(capabilityQuota); }

Spring事务异常回滚,捕获异常不抛出就不会回滚

最近遇到了事务不回滚的情况,我还考虑说JPA的事务有bug? 我想多了.......    为了打印清楚日志,很多方法我都加tyr catch,在catch中打印日志.但是这边情况来了,当这个方法异常时候 日志是打印了,但是加的事务却没有回滚. 例:     类似这样的方法不会回滚 (一个方法出错,另一个方法不会回滚) : [html] view plain copy if(userSave){ try { userDao.save(user); userCapabilityQuotaDao.s

spring + myBatis 常见错误:注解事务不回滚

最近项目在用springMVC+spring+myBatis框架,在配置事务的时候发现一个事务不能回滚的问题. 刚开始配置如下:springMVC.xml配置内容: spring.xml配置内容 从上面两个配置文件看出,开始的时候我把Service配置在springMVC中的.但是,事务注解我配置在了spring中.这样就会出现问题了.因为spring的容器(applicationContext)和springMVC的(applicationContext)是不同的. spring容器加载得时候

Spring AOP声明式事务异常回滚

转:http://hi.baidu.com/iduany/item/20f8f8ed24e1dec5bbf37df7 近日测试用例,发现这样一个现象:在业务代码中,有如下两种情况,比如:throw new RuntimeException("xxxxxxxxxxxx"); 事物回滚throw new Exception("xxxxxxxxxxxx"); 事物没有回滚 自以为很了解事物,或许时间久远的缘故,没分析出来何故,遂查阅了下资料,写下了如下的内容,供参考: 1

sqlserver事务与回滚

如果要在Production执行数据改动必须小心,可以使用事务提前验证一下自己写的SQL是不是你期望的.尤其是Update的where 条件有问题的话,跟新的记录就会超出预期的范围.如下面的语句,一着急我差点把cartid = 678417 忘了,要是在Production执行影响就大了. BEGIN TRANSACTION update cartitem set deleted=0 where cartid = 678417 and modifieddate > '2014-08-07' se