注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

淡泊明智

 
 
 

日志

 
 

SQL中的事务以及批量更新  

2012-11-27 16:08:20|  分类: 数据库技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

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();//为所有已提交的命令返回一个记录数的数组

  评论这张
 
阅读(910)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018