jav*_*nix 2 java mysql atomic batch-file
假设我有一个包含有效数据的表.我想以某种方式修改这些数据,但我想确保如果修改中出现任何错误,表格不会更改,并且该方法会返回该效果.
例如,(这是一个愚蠢的例子,但它说明了与我相关的观点)假设我想编辑"名称"列中的所有条目,以便它们被正确地大写.出于某种原因,我希望所有的名称都具有适当的大小写,或者它们中没有一个具有适当的大小写(并且表的起始状态是它们中的NONE).
是否有已经实现的方法在表上运行批量更新,并确保如果任何一个更新失败,所有更改都将回滚并且表保持不变?
我可以想出几种方法来手工完成这个(尽管建议很受欢迎),但如果有一些我可以使用的方法会以这种方式运行,那就太好了.我查看了java.sql.statement.executeBatch()命令,但是我不相信文档说如果以某种方式失败我的表就不会被更改.
当我从JDBC开始时,我也遇到了这个问题 - 它似乎面对我对数据库和ACID保证的理解.
在开始之前,请确保您的MySQL 存储引擎支持事务.MyISAM不支持事务,但InnoDB支持.
然后确保禁用JDBC autoCommit - Connection.setAutoCommit(false)或者JDBC将每个语句作为单独的trasaction运行.提交将是一个全有或全无的事情 - 不会有部分变化.然后运行各种更新语句,最后调用Connection.commit()提交事务.
有关JDBC事务的更多详细信息,请参见Sun Tutorial.
使用批处理不会改变ACID保证 - 您要么已成交,要么不成功! - 批处理更多的是一起收集多个语句以提高性能.
| 归档时间: |
|
| 查看次数: |
1372 次 |
| 最近记录: |