oracle中事务处理(一)
事务:事务用于保证数据的一致性,它由一组相关的dml的语句组成,该组的dml
语句,要么全部成功,要么全部失败.(dml语句简单的说就是增加,修改,删除
;dml语句没有查询语句)
事务和锁:
当执行事务操作时(dml语句),oralce会在被作用的表上加锁,防止其它用户改
表的结果,这里对我们用户来讲是非常重要的!
提交事务:
1)使用commit语句可以提交事务
2)当执行commit语句后,会确认事务的变化,并且结束事务,删除保存点,释放锁,
其它会话将可以查看到事务变化后的新数据
下面简单介绍在java上使用oracle事务管理
例子:从scott的sal-100 同时smith的sal+100
package javastudy;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Test2 {
public static void main(String[] args) {
///事务案例
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "lh621366");
conn.setAutoCommit(false);///设置默认不自动提交
Statement st = conn.createStatement();
///SCOTT的薪水 sal-100
st.executeUpdate("update emp set sal=sal-100 where ename='SCOTT'");
///SMITH的sal+100
int i = 7/0;///这里是为了抛出异常,为了证明事务提交的一致性(要么全部成功,要么全部失败)
(抛出异常后,回滚点会回到conn=null这里,所以下面执行的代码也不会生效)
st.executeUpdate("update emp set sal=sal+100 where ename='SMITH'");
///提交事务
conn.commit();///将st更新的这两个sql语句和int i=7/0这个语句当做一个整体事务来处理
st.close();
conn.close();
} catch (Exception e) {
try {
///如果发生异常,就回滚
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
}
}
}
事务:事务用于保证数据的一致性,它由一组相关的dml的语句组成,该组的dml
语句,要么全部成功,要么全部失败.(dml语句简单的说就是增加,修改,删除
;dml语句没有查询语句)
事务和锁:
当执行事务操作时(dml语句),oralce会在被作用的表上加锁,防止其它用户改
表的结果,这里对我们用户来讲是非常重要的!
提交事务:
1)使用commit语句可以提交事务
2)当执行commit语句后,会确认事务的变化,并且结束事务,删除保存点,释放锁,
其它会话将可以查看到事务变化后的新数据
下面简单介绍在java上使用oracle事务管理
例子:从scott的sal-100 同时smith的sal+100
package javastudy;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Test2 {
public static void main(String[] args) {
///事务案例
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "lh621366");
conn.setAutoCommit(false);///设置默认不自动提交
Statement st = conn.createStatement();
///SCOTT的薪水 sal-100
st.executeUpdate("update emp set sal=sal-100 where ename='SCOTT'");
///SMITH的sal+100
int i = 7/0;///这里是为了抛出异常,为了证明事务提交的一致性(要么全部成功,要么全部失败)
(抛出异常后,回滚点会回到conn=null这里,所以下面执行的代码也不会生效)
st.executeUpdate("update emp set sal=sal+100 where ename='SMITH'");
///提交事务
conn.commit();///将st更新的这两个sql语句和int i=7/0这个语句当做一个整体事务来处理
st.close();
conn.close();
} catch (Exception e) {
try {
///如果发生异常,就回滚
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
}
}
}