<%@ page contentType="text/html;charset=GBK"%>
<%@ page
import="java.util.*,java.sql.*,javax.sql.*,java.io.*,javax.naming.*"%>
<%
Connection connection = null;
Statement statement = null;
try{
//get connection
Class.forName("oracle.jdbc.driver.OracleDriver");
connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","***","***");
connection.setAutoCommit(false);
statement = connection.createStatement();
statement.execute("insert into aaa values(13)");
statement.execute("insert into aaa values(2,2,3)"); //这行
System.out.println("----1-");
connection.commit();
System.out.println("--2---");
System.out.println("execute successs");
connection.setAutoCommit(true);
}catch(Exception e){
System.out.println("exception rollback");
Thread.sleep(10000);
System.out.println("-----1");
connection.rollback();
}finally{
statement.close();
connection.close();
}
%>
代码如上:
1. 上面代码到 //这行后进入 catch代码块,即没有提交,但oracle jdbc的实现是关闭连接前自动提交的
2. 如果没有这行 connection.rollback(); 将被插入 13
3. 有 这行 connection.rollback(); 后真正实现了回滚了
4. transaction 就是要么全做,要么全不做