工作二总结——objective-C中sqlite3数据库的处理(其三) sqlite3数据库事务的使用

本文介绍了在Objective-C中使用sqlite3数据库事务进行大量数据更新的优化,通过事务将70秒的数据库生成时间缩短至1.5秒。事务的使用显著提高了效率和吞吐量,同时避免了数据不一致的问题。在FMDB库中,开启事务的代码示例也进行了说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以前知道的太少了,这样大量的数据更新居然没有用到数据库事务,怪不得时间开销这么高。

工作二后来优化了一下,加入了sqlite3的事务,效果十分明显,70秒的数据库生成时间缩短到了1.5秒。

事务(transaction)的原理是,对数据库进行更新的语句先储存起来,储存到一定程度将这些语句一并提交(commit),如果尚未提交,但中途出现了异常,则这些语句都可以撤回(rollback)。

使用事务有两个非常明显的好处:

1、将大量更新语句合并到一起,极大的缩短了访问数据库的次数,如此大量提高了效率和吞吐量。例如本人的“工作二”,将八万多次数据库更新合并到一次提交,原操作时间70秒降低到了1.5秒,效率提高的幅度简直可怕。

2、避免了一些非常恶心的情况,比如同样一个对象有许多不同的属性都要插入到数据库的不同表中,需要多句sql更新才能完成操作。如果操作中途出现了异常,则可能某个对象只有一半的数据输入了数据库,还有另一半是空白的,这还不如完全没输入。而事务的rollback就是干这个用的。

FMDB下使用事务方式十分简单:

建立数据库db

FMDatabase *db = [FMDatabase databaseWithPath:path];

事务开始

[db beginTransaction];
BOOL isRollback = NO;
具体数据库操作可以包在@try中,如果捕获到异常就rollback

@try {
	// 数据库操作代码
}
@catch (NSException *exception) {
	isRollback = YES;
	[db rollback];
}
@finally {
	if (isRollback == NO) {
		[db commit];
	}
}
finally
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值