1.什么是事务
事务(transaction)是一组DML操作组成的单元,用来保证数据的一致性。可以这样理解事务,对数据库的一系列DML操作,在数据修改过程中暂时不写入数据库,而是将这些变更的数据放入缓存,直到commit后才真正写入到数据库(这里需要注意一下commit为显式提交事务,除此之外还可以隐式的提交事务,包括退出sql,执行DML操作等)。 事务中最关键的两个语句就是commit和rollback。
2.JDBC中设置事务
在JDBC中,如果我们不对事务进行设置,那么他是自动提交的,也就是执行一个DML操作就自动commit一次,可以通过conn.getAutoCommit()方法去获得现在的状态。
3.例子
public static void testTransaction(){ Connection conn=null; Statement sm=null; try { Class.forName("oracle.jdbc.driver.OracleDriver"); conn=DriverManager.getConnection("jdbc:oracle:thin:@192.168.10.22:1521:orcl", "scott", "guolei"); sm=conn.createStatement(); boolean autoCommit=conn.getAutoCommit();//取得现在的状态 System.out.println(autoCommit);//打印发现现在为真,即处于自动提交状态 conn.setAutoCommit(false); System.out.println(sm.executeUpdate("insert into emp(empno,ename) values(1235,'songkun')")); System.out.println(sm.executeUpdate("insert into emp(empno,ename) values(1234,'songkun')")); conn.commit();//执行两条sql语句,如果都执行才提交,如果不设置autocommit方法就是执行一句,提交一句。 } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); try { conn.rollback();//不要忘记这里 } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } }finally{ try { if(conn!=null){ conn.close(); } if(sm!=null){ sm.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |