package com.zmt.oracle;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Savepoint;
import java.sql.Statement;
/**
* @ClassName: TransationTest
* @Description:Oracle事物
* @author: Mr.薛
* @date: 2019年3月18日 下午4:38:24
* @Copyright: 2019
* @Company: ***
*/
public class TransationTest {
public static void main(String[] args) {
// noTranscation();
haveTranscation();
}
/*无Oracle事物*/
@SuppressWarnings("unused")
public static void noTranscation(){
Connection conn = null;
try {
// 1.加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
// 2.得到连接
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "zaq123ZMT");
Statement sm = conn.createStatement();
// 从scott的sal中减去100
sm.executeUpdate("update emp set sal=sal-100 where ename='SCOTT'");
int i = 7 / 0; //报java.lang.ArithmeticException: / by zero异常
// 给smith的sal加上100
sm.executeUpdate("update emp set sal=sal+100 where ename='SMITH'");
// 关闭打开的资源
sm.close();
conn.close();
} catch (Exception e) {
// 如果发生异常,就回滚
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
}
/*有Oracle事物*/
@SuppressWarnings("unused")
public static void haveTranscation(){
Connection conn = null;
Savepoint txpoint = null; //指定保存点
try {
// 1.加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
// 2.得到连接
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "zaq123ZMT");
// 加入事务处理
conn.setAutoCommit(false);// 设置不能默认提交 - 很重要
Statement sm = conn.createStatement();
// 从scott的sal中减去100
sm.executeUpdate("update emp set sal=sal-100 where ename='SCOTT'");
// txpoint = conn.setSavepoint();//指定保存点
txpoint = conn.setSavepoint("point1");//指定保存点 - 名称
int i = 7 / 0;
// 给smith的sal加上100
sm.executeUpdate("update emp set sal=sal+100 where ename='SMITH'");
// 提交事务
conn.commit();
// 关闭打开的资源
sm.close();
conn.close();
} catch (Exception e) {
// 如果发生异常,就回滚
try {
conn.rollback(txpoint);
// conn.rollback();//回滚所有节点 - 慎用
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
}
}