数据库操作(fmdb多线程操作)

本文介绍了如何在iOS应用中使用FMDBQueue库来实现多线程的SQLite数据库操作,包括导入库、修改库设置、创建数据库实例、以及增、删、改、查等基本操作,确保了在并发环境下的安全性。

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

1.导入

-1.三方库fmdb

-2.导入处理多线程的头文件

   #import "FMDatabaseQueue.h"

-3.导入系统的sqlite

2.修改

-1.修改三方库的非arc改为arc:-fno-objc-arc

3.创建

-1.创建数据库创建数据库实例对象,用于处理多线程的问题

  FMDatabaseQueue *queue;

2.拼接存储地址,同数据库操作

 NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,  NSUserDomainMask, YES)[0];

 NSString *filePath = [cachePath stringByAppendingPathComponent:@"t_user.sqlite"];

3处理多线程安全问题提供一个多线程实例,拼接路径

 queue = [FMDatabaseQueue databaseQueueWithPath:filePath];

4进行线程的操作

 [queue inDatabase:^(FMDatabase *db) {

        if ([db executeUpdate:@"create table if not exists t_user (id integer primary key autoincrement,name varchar(255),age varchar(255));"]) {

            NSLog(@"成功创建"); 

        }else{

            NSLog(@"创建失败");

        }

    }];

4.操作

-1.增       

 [queue inDatabase:^(FMDatabase *db) {

            if ([ db executeUpdate:@"insert into t_user (name,age) values (?,?)",@"lipp",@(500)]) {

                NSLog(@"添加成功");

            } else{

                NSLog(@"添加失败");

            }

        }];

         

-2.删

[queue inDatabase:^(FMDatabase *db) {

            -2.0 开启事务 

  [db beginTransaction];

  if ([ db executeUpdate:@"delete from t_user where id = ?",@1]) {

                NSLog(@"删除成功");

            } else{

                NSLog(@"删除失败");

            -2.1还原,如果删除失败的情况

                [db rollback]; 

            }

            -2.2如果进行多个删除,多个操作时候进行的操作,全部操作完成在去提交

            [db commit];

        }];

-3.改

 [queue inDatabase:^(FMDatabase *db) {

            if ([db executeUpdate:@"update t_user set name = ? where id = ?;",@"ppben",@1]) {

                NSLog(@"修改成功");

            }

            else {

                NSLog(@"修改失败");

            }

        }];

-4.查

[queue inDatabase:^(FMDatabase *db) {

            FMResultSet *result = [db executeQuery:@"select * from t_user"];

            while ([result next]) {

                NSString *name = [result stringForColumn:@"name"];

                NSString *age = [result stringForColumn:@"age"];

                NSLog(@"%@----%@",name,age);

            }   

        }];


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值