事务处理
1.什么是事务?
从数据库角度说,就是一组SQL指令,要么全部执行成功,若因为某个原因其中一条指令执行有错误,则撤销先前执行过的所有指令。
要么全部执行,要么撤销全部不执行。
java事务就是通过JDBC来实现的。
2.为什么需要事务?
未解决数据安全操作提出的。事务控制实际上就是控制数据的安全访问。
3.JDBC事务
JDBC事务是用Connection对象控制的。Connection提供了两种事务模式:自动提交和手工提交。默认是自动提交。也就是说,一条对数据库的更新表达式代表一项事务操作,操作成功后,系统将自动调用commit()来提交,否则调用rollback()来回滚。
可以通过调用setAutoCommit(false)来禁止自动提交。之后就可以把多个数据库操作的表达式作为一个事务,在操作完成后调用commit()来进行整体提交,若其中一个表达式操作失败,都不会执行到commit(),并将产生异常;此时就可以在异常捕获时调用rollback()进行回滚。这样做可以多次更新操作后相关数据的一致性。
例:
package sqltest; import java.sql.*; class Dbtest2 { public static void main (String args[]) throws Exception { String url = null; String sql = "insert into userinfo values('love', '123')"; Connection con = null; Statement stmt = null; try{ url = "jdbc:sqlserver://127.0.0.1:1433;databaseName=QQ;user=sa;password=123456"; Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); con = DriverManager.getConnection(url,"sa","123456"); stmt = con.createStatement(); con.setAutoCommit(false);//取消自动提交事务 stmt.executeUpdate(sql); stmt.executeUpdate(sql); con.commit();//提交事务 con.close(); }catch(Exception e1){ try{ con.rollback(); }catch(SQLException e2){ } } } }
这里特意增加两条相同的记录,第一条记录添加成功,第二条记录添加不成功。但记录没有添加到数据库中,说明事务全部回滚。

浙公网安备 33010602011771号