Chinaunix首页 | 论坛 | 博客
  • 博客访问: 648999
  • 博文数量: 632
  • 博客积分: 39960
  • 博客等级: 大将
  • 技术积分: 4975
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-16 18:20
文章分类

全部博文(632)

文章存档

2011年(1)

2008年(631)

我的朋友

分类:

2008-10-16 18:23:34

import java.sql.*;

/**
* JDBC编程事务控制模型备忘
*
* @author : leizhimin,2008-8-21 14:48:42。


*/

public class JdbcTxText {
    public static void main(String[] args) {
        test();
    }

    public static void test() {
        Connection conn = null;
        //定义一个回滚点
        Savepoint savepoint1 = null;
        try {
            //获取一个数据库连接
            conn = DriverManager.getConnection("url", "user", "password");
            //设置不自动提交,相当于开启了事务
            conn.setAutoCommit(false);
            //设置JDBC事务的级别
            conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
            //创建一个用于执行静态 SQL 语句并返回它所生成结果的对象
            Statement stmt = conn.createStatement();
            //执行连个SQL语句,在同一个事务中
            stmt.executeUpdate("insert into test values(1,'aaa')");
            //定义一个回滚到(保存点)savepoint1,在事务失败的时候,可以回滚到定义的回滚点
            savepoint1 = conn.setSavepoint("insert_end");
            stmt.executeUpdate("update test set name = 'bbb' where id =1");
            //提交事务
            conn.commit();
        } catch (SQLException e) {
            try {
                //当事务失败时候,回滚到(保存点)savepoint1
                conn.rollback(savepoint1);

                // 当本事务中的插入和更新SQL其中一个执行异常的时候,整个事务回滚
                //conn.rollback();
            } catch (SQLException e1) {
                throw new RuntimeException("回滚事务发生异常!", e);
            }
            throw new RuntimeException("执行事务发生异常!", e);
        } finally {
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    throw new RuntimeException("关闭数据库连接发生异常!", e);
                }
            }
        }
    }
}
--------------------next---------------------


阅读(303) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~