FMDB的使用

本文介绍了一个针对FMDB的封装类DBCache,简化了iOS应用中SQLite数据库的操作过程。通过具体的代码示例展示了如何使用该类进行学生信息的增删改查。

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

FMDB是一个很强大的数据库操作工具,对于ios开发者来说,省去了极大一部分操作sqlite需要的时间,让我们可以更加专注于自己工程的核心代码.

这里对FMDB封装了一个DBCache类,简要的说明问题

关于数据持久化的问题,这里有一篇非常棒的文章推荐给大家:传送门


//DBCache.h

#import <Foundation/Foundation.h>
#import <FMDB.h>

@interface DBCache : NSObject

- (id)init;

- (void)insertStudentWithName:(NSString *)name Address:(NSString *)address andId:(NSString *)id;

- (void)deleteStudentWithName:(NSString *)name;

- (void)updateStudentWhereName:(NSString *)name WithAddress:(NSString *)address andId:(NSString *)id;

- (void)selectStudentWhereName:(NSString *)name andBackBlock:(void(^)(NSString *address, NSString *id))backBlock;

@end

//DBCache.m

#import "DBCache.h"

@implementation DBCache

{
    FMDatabase *_db;
}

- (id)init{
    self=[super init];
    if (self) {
        [self createTable];
    }
    return self;
}
//创建
- (void)createTable{
    NSArray *path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *document=[path objectAtIndex:0];
    NSString *dbPath=[document stringByAppendingPathComponent:@"FMDB.sqlite"];
    NSFileManager *fileManager=[NSFileManager defaultManager];
    _db=[FMDatabase databaseWithPath:dbPath];
    if (![fileManager fileExistsAtPath:dbPath]) {
        NSLog(@"FMDB.sqlite is not exist and is building.....");
        if ([_db open]) {
            bool cflag=[_db executeUpdate:@"create table if not exists StudentList (name text, address text, id text)"];
            if (cflag) {
                NSLog(@"create StudentList table Successful");
            }
            [_db close];
        }
        NSLog(@"FMDB.sqlite:%@",_db);
    }
}
//增
- (void)insertStudentWithName:(NSString *)name Address:(NSString *)address andId:(NSString *)id{
    [_db open];
    bool inflag=[_db executeUpdate:@"INSERT INTO StudentList (name, address, id) VALUES (?, ?, ?)",name,address,id];
    if (inflag){
        NSLog(@"insert student successful");
    }
    [_db close];
}
//删
- (void)deleteStudentWithName:(NSString *)name{
    [_db open];
    bool dflag=[_db executeUpdate:@"DELETE FROM StudentList WHERE name=?",name];
    if (dflag) {
        NSLog(@"delete student successful");
    }
    [_db close];
}
//改
- (void)updateStudentWhereName:(NSString *)name WithAddress:(NSString *)address andId:(NSString *)id{
    [_db open];
    bool uflag=[_db executeUpdate:@"UPDATE StudentList SET address=?, id=? WHERE name=?",address,id,name];
    if(uflag){
        NSLog(@"update student successful");
    }
    [_db close];
}
//查
- (void)selectStudentWhereName:(NSString *)name andBackBlock:(void(^)(NSString *address, NSString *id))backBlock{
    [_db open];
    NSString *addressOut=[_db stringForQuery:@"SELECT address FROM StudentList WHERE name=?",name];
    NSString *idOut=[_db stringForQuery:@"SELECT id FROM StudentList WHERE name=?",name];
    [_db close];
    backBlock(addressOut,idOut);
}

@end

//ViewController.m中调用该类的方法

DBCache *dbCache=[[DBCache alloc]init];
            [dbCache insertStudentWithName:@"小明" Address:@"北京" andId:@"1"];
            [dbCache selectStudentWhereName:@"小明" andBackBlock:^(NSString *address, NSString *id) {
                NSLog(@"xiaoming address is:%@",address);
                NSLog(@"xiaoming id is:%@",id);
            }];
            [dbCache updateStudentWhereName:@"小明" WithAddress:@"天津" andId:@"2"];
            [dbCache selectStudentWhereName:@"小明" andBackBlock:^(NSString *address, NSString *id) {
                NSLog(@"xiaoming address is:%@",address);
                NSLog(@"xiaoming id is:%@",id);
            }];
            [dbCache deleteStudentWithName:@"小明"];
            [dbCache selectStudentWhereName:@"小明" andBackBlock:^(NSString *address, NSString *id) {
                NSLog(@"xiaoming address is:%@",address);
                NSLog(@"xiaoming id is:%@",id);
            }];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值