事务的操作
事务是为了确保数据库的完整性。当所有语句都顺利执行后,事务可以提交,否则,如果其中某个语句遇到错误,那么事务将被回滚,就好像没有执行过任何命令一样。
如果将更新语句组合成一个事务,那么事务要么成功执行所有的操作并被提交,要么在中间某个位置发生失败,在这种出现失败的情况下,可以执行回滚操作,
将数据库自动撤销回上次提交事务以来的所有更新操作产生的影响。
默认情况下,数据库处于自动提交模式。每个SQL语句一旦被执行便会被提交给数据库,一旦命令提交,就无法对他进行回滚操作。
一、 事务的回滚
Connection conn = DriverManager.getCommection(url,username,password);
可以使用 conn.setAutoCommit(false);来关闭自动提交。
然后调用Statement stat=conn.createStatement();来创建语句对象。
用stat.executeUpdate(SQL语句);执行sql命令,执行完之后,调用conn.commit()方法,出现错误则调用conn.rollback()进行回滚。
二、 保存点的使用
为了更好的控制事务的回滚操作,我们可以设置保存点(Save point),创建一个保存点意味着稍后只需返回到这个点,而不是整个事务的开头
Connection conn = DriverManager.getCommection(url,username,password);
Statement stat=conn.createStatement();
stat.executeUpdate(SQL语句);
Savepoint svpt= conn.setSavepoint();
stat.executeUpdate(SQL语句);
if(...)
{
conn.rollback(avpt);
}
else
{
conn.commit();
}
这里,我们使用了匿名保存点,也可以给他添加名字如
Savepoint svpt= conn.setSavepoint("savepoint");
当使用一个保存点完成所有操作后,必须释放:
conn.releaseSavepoint(svpt);