当前位置: 主页 > 数据库

fm数据库-斯科尔斯 fm数据

发布时间:2023-02-09 14:08   浏览次数:次   作者:佚名

物与非物

事物是并发控制的基本单元。 所谓事务就是一系列的操作。 这些操作要么执行,要么不执行。 它是一个不可分割的工作单元。

物与非物,举个简单的例子,物就是把所有的东西打包在一起,一次性处理。 它们不是事务,而是一个接一个地执行和处理。

数据库存储路径

- (NSString *)dbPath{
    NSString *dbPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
NSUserDomainMask, YES)lastObject]stringByAppendingPathComponent:@"FMDB.sqlite"];
    return dbPath;
}

非事务性先创建队列

 FMDatabaseQueue *dabaseQueue = [FMDatabaseQueue databaseQueueWithPath:[self dbPath]];

向非事务处理中添加一组操作

[dabaseQueue inDatabase:^(FMDatabase *db) {

fm 哈维 数据_fm数据库_斯科尔斯 fm数据

BOOL iserror = NO; int temp = -1; for (int i = 0; i < 10000000; i++) { iserror = [db executeUpdate:@"insert into stu values (?)",@(i)]; if (!iserror) {//说明iserror == NO插入有问题了。 if (temp == -1) { temp = i;//在这里记录出错的条数 } } } if (iserror) { NSLog(@"所有插入操作成功"); }else{

fm数据库_fm 哈维 数据_斯科尔斯 fm数据

NSLog(@"插入操作失败%d",temp); } }];

这里我们要向数据库中插入10,000,000条数据。 当使用非事务处理时fm数据库,会一条一条插入到数据库中fm数据库,来回往复,直到所有数据都插入,耗费大量时间。

事物

还是上面的代码,我们只需要做一些小改动就可以实现对事物的一个处理

    FMDatabaseQueue *dabaseQueue = [FMDatabaseQueue databaseQueueWithPath:[self dbPath]];
    //将一组操作添加到非事务处理中
    [dabaseQueue inDatabase:^(FMDatabase *db) {
 /**
  *  操作放入事物中(加入事物操作)
  */

fm数据库_fm 哈维 数据_斯科尔斯 fm数据

[db beginTransaction]; BOOL iserror = NO; int temp = -1; for (int i = 0; i < 10000000; i++) { iserror = [db executeUpdate:@"insert into stu values (?)",@(i)]; if (!iserror) {//说明iserror == NO插入有问题了。 if (temp == -1) { temp = i; } } } if (iserror) {

fm 哈维 数据_fm数据库_斯科尔斯 fm数据

NSLog(@"所有插入操作成功"); }else{ NSLog(@"插入操作失败%d",temp); } /** * 提交事物 */ [db commit]; }];

上面的方法是通过我们手动给事物添加操作,然后手动提交。

其实FMDB已经帮我们封装了一个处理方法

示例代码

fm 哈维 数据_fm数据库_斯科尔斯 fm数据

创建队列

FMDatabaseQueue *dataBaseQueue = [FMDatabaseQueue databaseQueueWithPath:[self dbPath]];

给事物添加操作

[dataBaseQueue inTransaction:^(FMDatabase *db, BOOL *rollback) {
        NSLog(@"开始插入数据");
        BOOL iserror = NO;
        for (int i = 0; i < 10000000; i++) {
        iserror = [db executeUpdate:@"insert into stu values (?)",@(i)];
        }
        if (iserror) {
            NSLog(@"所有操作成功");
        }
    }];

这个方法内部已经帮我们完成了对事物添加操作和提交事物的操作。 我们只需要在方法中添加操作即可。