dml语句写在事务里面,看下面的例子,注释处添加事务,我没理解,应为直观上看不出来,各位帮解释下啊?import java.sql.*;
public class Transaction {
public static void main(String[] args) {
Connection co = null;
Statement st = null;
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
co = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:myora1", "scott", "tiger");
// co.setAutoCommit(false);
st = co.createStatement();
st.executeUpdate("insert into pme(empno,ename) values(100,'xxx')");
int x = 9/0;
st.executeUpdate("insert into pme(empno,ename) values(200,'yyy')");
// co.commit();
// co.setAutoCommit(true);
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
// try{
// co.rollback();
// co.setAutoCommit(true);
// }catch(SQLException e1){
// e1.printStackTrace();
// }
}finally{
try{
if(st != null){
st.close();
st = null;
}
if(co != null){
co.close();
co = null;
}
}catch(SQLException e){
e.printStackTrace();
}
}
}}
public class Transaction {
public static void main(String[] args) {
Connection co = null;
Statement st = null;
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
co = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:myora1", "scott", "tiger");
// co.setAutoCommit(false);
st = co.createStatement();
st.executeUpdate("insert into pme(empno,ename) values(100,'xxx')");
int x = 9/0;
st.executeUpdate("insert into pme(empno,ename) values(200,'yyy')");
// co.commit();
// co.setAutoCommit(true);
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
// try{
// co.rollback();
// co.setAutoCommit(true);
// }catch(SQLException e1){
// e1.printStackTrace();
// }
}finally{
try{
if(st != null){
st.close();
st = null;
}
if(co != null){
co.close();
co = null;
}
}catch(SQLException e){
e.printStackTrace();
}
}
}}
public class Transaction {
public static void main(String[] args) {
Connection co = null;
Statement st = null;
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
co = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:myora1", "scott", "tiger");
co.setAutoCommit(false);//设置为手动提交
st = co.createStatement();
st.executeUpdate("insert into pme(empno,ename) values(100,'xxx')");
int x = 9/0;
st.executeUpdate("insert into pme(empno,ename) values(200,'yyy')");
co.commit(); //手动提交
co.setAutoCommit(true); 设置为自动提交
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
/*若自动提交时抛出异常,则回滚,然后再设置成自动提交*/
try{
co.rollback();
co.setAutoCommit(true);
}catch(SQLException e1){
e1.printStackTrace();
}
/*如上为自动提交时的异常处理*/
}finally{
try{
if(st != null){
st.close();
st = null;
}
if(co != null){
co.close();
co = null;
}
}catch(SQLException e){
e.printStackTrace();
}
}
}}
2、如果设置 co.setAutoCommit(false),则之后的所有SQL语句为一个事务,直到rollback或commit;所谓事务是用于保证数据的一致性,它由一组相关的DML语句组成,该组的DML语句要么全部成功,要么全部失败。例如银行转帐操作,转出帐户的减少的update操作与转入帐户增加的update操作应该为一个事务。