首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

Java JDBC基础(4)

2013-06-25 
Java JDBC基础(四)?1.全局事务与还原点测试package com.yli.demoimport java.sql.Connectionimport java

Java JDBC基础(四)

?1.全局事务与还原点测试

package com.yli.demo;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import java.sql.Savepoint;/** * 全局事务与还原点测试 */public class TransactionTest {    public static void main(String[] args) {        // Test1();        Test2();    }    /**     * 不创建还原点回滚:即全局回滚     */    public static void Test1() {        try {            Connection conn;            conn = ConnectionUtil.getConnection();            // Connection默认全局事务为自动提交            // 实则false则需要手动提交            conn.setAutoCommit(false);            // PreparedStatement[update]            String sql = "update ES_T_SHOP_AFFICHE set AFFICHETITLE='iteye' where AFFICHEID=?";            PreparedStatement preStat = conn.prepareStatement(sql);            preStat.setInt(1, 100000493);            preStat.executeUpdate();            try {                int a = 10 / 0;                System.out.println(a);                // 如果运行都正确:提交,一旦提交回滚也没有用                conn.commit();            } catch (ArithmeticException e) {                e.printStackTrace();                // 如果遇到错误,比如除以0:回滚                conn.rollback();            }            ConnectionUtil.close(conn);        } catch (SQLException e) {            e.printStackTrace();        }    }    /**     * 创建还原点回滚:回滚到还原点     */    public static void Test2() {        try {            Connection conn;            conn = ConnectionUtil.getConnection();            // Connection默认全局事务为自动提交            // 实则false则需要手动提交            conn.setAutoCommit(false);            // PreparedStatement[update]            String sql = "update ES_T_SHOP_AFFICHE set AFFICHETITLE='suning' where AFFICHEID=?";            PreparedStatement preStat = conn.prepareStatement(sql);            preStat.setInt(1, 100000493);            preStat.executeUpdate();            // 创建还原点            Savepoint savePoint1 = conn.setSavepoint("savePoint1");            sql = "update ES_T_SHOP_AFFICHE set AFFICHETITLE='hello' where AFFICHEID=?";            preStat = conn.prepareStatement(sql);            preStat.setInt(1, 100000496);            preStat.executeUpdate();            if (true) {                // 回滚到第一个还原点,表示从一开始执行到该还原点的事务都会正常提交                // 而从该还原点之后执行的事务,都会回滚掉                conn.rollback(savePoint1);            }            // 释放还原点            conn.releaseSavepoint(savePoint1);            // 最后必须要提交,只是还原点以后执行的SQL都不会提交            conn.commit();                        ConnectionUtil.close(conn);        } catch (SQLException e) {            e.printStackTrace();        }    }}

?

?

热点排行