SQL中的事务以及批量更新

来源:互联网 发布:c语言专家电子书 编辑:程序博客网 时间:2024/06/05 06:16

1、SQL中的事务指的是将一组SQL语句同时提交,举个例子吧:在银行转账的时候,它的执行过程应该是先把钱取出来,然后再把钱存到另一个账号里面去吧,它的SQL执行过程应该是先DELETE,然后再UPDATE吧,如果在UPDATE的时候突然网络出了问题,其结果会是怎样呢?按照单条语句的提交策略则会因此导致钱没存进去,但是却已经取出来啦,这样的话我相信银行早晚会乱套的。但是,我们可以才去事务的方法去解决,即把DELETE与UPDATE捆绑为一个事物,对它们同时进行提交,如果发生错误就对其进行回滚。这样的话,数据就不会因此而乱套啦。但是,默认情况下,数据库连接处于自动提交模式(autocommit mode),所以我们先得关闭这种自动提交模式,看看下面的例子吧:

conn.setAutoCommit(false);

Statement stat = conn.CreateStatement();

然后任意多次的执行executeUpdate方法:

stat.executeUpdate(command1);

stat.executeUpdate(command2);

stat.executeUpdate(command3);

···

执行所有命令之后,调用commit方法:

conn.commit();

如果出现错误,则回滚:

conn.rollback();

当然,我们可以使用保存点(Save point)来更好的控制回滚操作,这样的话只需返回到保存点,而非事务的开头。如:

Savepoint svpt = conn.setSavepoint();

conn.rollback(svpt);

2、批量更新

批量更新与普通更新的区别前者一次性把所有的语句都更行啦,所使用到的语句如下:

 也必须保证 conn.setAutoCommit(false);,且executeBatch();//提交后也需要conn.commit();

①先把所有的SQL都放入addBatch中,如:stat.addBatch(command);//command为SQL语句

你可以把这个语句放到循环中添加。

②在最后通过更新语句一次性更新,如下:
int[] counts = stat.executeBatch();//为所有已提交的命令返回一个记录数的数组

原创粉丝点击