数据持久化(三)使用第三方类库FMDB

数据持久化(三)使用第三方类库FMDB,第1张

概述@SQLite是一种小型的轻量级的关系型数据库,在移动设备上使用是非常好的选择,无论是Android还是IOS,都内置了SQLite数据库,现在的版本都是SQLite3。在IOS中使用SQLite如果使用SDK提供的方法,特别麻烦也不利于理解和使用,感觉使用很不方便,今天就讲讲一个针对IOS的SQlite API封装的第三方库FMDB,FMDB对SDK中的API做了一层封装,使之使用OC来访问,使

@sqlite是一种小型的轻量级的关系型数据库,在移动设备上使用是非常好的选择,无论是AndroID还是IOS,都内置了sqlite数据库,现在的版本都是sqlite3。在IOS中使用sqlite如果使用SDK提供的方法,特别麻烦也不利于理解和使用,感觉使用很不方便,今天就讲讲一个针对IOS的sqlite API封装的第三方库FMDB,FMDB对SDK中的API做了一层封装,使之使用OC来访问,使用方便而且更熟悉。FMDB的下载地址https://github.com/ccgus/fmdb


@FMDB主要涉及两个类,FMDatabase和FMResultSet下载完FMDB源码后把文件拖到工程中,并导入sqlite支持 库,libsqlite3.0.dylib


#import "HMTDataBaseHandle.h"#import "FMDB.h"#import "HMTPerson.h"@implementation HMTDataBaseHandlestatic HMTDataBaseHandle * _dbHandle = nil;+ (HMTDataBaseHandle *)shareInstance{    @synchronized(self){            if (!_dbHandle) {                        _dbHandle = [[HMTDataBaseHandle alloc]init];                        [_dbHandle openDataBase];                        [_dbHandle createtable];        }    }        return _dbHandle;}#pragma mark - 定义一个 FMDatabase 对象static FMDatabase * database = nil;#pragma mark - 获得沙盒文件下documents路径- (Nsstring *)getdocumentsPath{    Nsstring * documents = [NSSearchPathForDirectorIEsInDomains(NSdocumentDirectory,NSUserDomainMask,YES) lastObject];    return documents;}#pragma mark - 打开数据库 *** 作------ databaseWithPath   open- (voID)openDataBase{    if (database) {        return;    }        Nsstring * DataBasePath = [[self getdocumentsPath] stringByAppendingPathComponent:@"test.sqlite"];        database = [FMDatabase databaseWithPath:DataBasePath];    if (![database open]) {                NSLog(@"打开数据库失败");    }        // 为数据库设置缓存,提高查询效率    database.shouldCacheStatements = YES;        NSLog(@"打开数据库成功");}#pragma mark - 关闭数据库 *** 作- (voID)closeDataBase{    if (![database close]) {        NSLog(@"关闭数据库失败");        return;    }        database = nil;    NSLog(@"关闭数据库成功");}#pragma mark - 管理创建表的 *** 作- (voID)createtable{    [self openDataBase];    // 判断表是否存在,不存在就创建------ tableExists    if (![database tableExists:@"Person"]) {                [database executeUpdate:@"CREATE table Person(ID INTEGER PRIMARY KEY autoINCREMENT,name TEXT,age INTEGER)"];                NSLog(@"创建表成功");    }        [self closeDataBase];}#pragma mark - 增加数据 *** 作----- executeUpdate- (voID)insertIntoDataBase:(HMTPerson *)person{    [self openDataBase];        [database executeUpdate:@" INSERT INTO Person (ID,name,age) VALUES (?,?,?)",[Nsstring stringWithFormat:@"%i",person.personID],person.personname,person.personAge]];    [self closeDataBase];}#pragma mark - 删除数据 *** 作----- executeUpdate- (voID)deleteDataFromDataBase:(HMTPerson *)person{    [self openDataBase];    [database executeUpdate:@" DELETE FROM Person WHERE ID = ?",person.personID]];        [self closeDataBase];}#pragma mark - 更新数据 *** 作----- executeUpdate- (voID)updateFromDataBase:(HMTPerson *)person{    [self openDataBase];        [database executeUpdate:@" UPDATE Person SET name = ? WHERE ID = ?",person.personID]];    [self closeDataBase];}#pragma mark - 查询数据 *** 作(与其他的都不一样,查询是调用executequery,切记切记!!!!!!)- (voID)selectAllDataFromDataBase{    [self openDataBase];    FMResultSet * resultSet = [database executequery:@" SELECT * FROM Person"];    while ([resultSet next]) {                int ID = [resultSet intForColumn:@"ID"];        Nsstring * name = [resultSet stringForColumn:@"name"];        int age = [resultSet intForColumn:@"age"];                NSLog(@"personID:%i,personname:%@,personAge:%i",ID,age);    }        [self closeDataBase];}@end

@FMDB提供如下多个方法来获取不同类型的数据:

1.intForColumn:
2.longForColumn:
3.longLongIntForColumn:
4.boolForColumn:
5.doubleForColumn:
6.stringForColumn:
7.dateForColumn:
8.dataForColumn:
9.datanocopyForColumn:
10.UTF8StringForColumnIndex:
11.objectForColumn:




@如果我们的app需要多线程 *** 作数据库,那么就需要使用FMDatabaseQueue来保证线程安全了。切记不能在多个线程中共同一个FMDatabase对象并且在多个线程中同时使用,这个类本身不是线程安全的,这样使用会造成数据混乱等问题。

使用FMDatabaseQueue很简单,首先用一个数据库文件地址来初使化FMDatabaseQueue,然后就可以将一个闭包(block)传入inDatabase方法中。在闭包中 *** 作数据库,而不直接参与FMDatabase的管理。

[cpp] view plain copy -(voID)executeDBOperation { //获取document文件夹下的数据库文件,没有则创建 Nsstring*docPath=[NSSearchPathForDirectorIEsInDomains(NSdocumentDirectory,YES)objectAtIndex:0]; Nsstring*dbPath=[docPathstringByAppendingPathComponent:@"user.db"]; FMDatabaseQueue*databaseQueue=[FMDatabaseQueuedatabaseQueueWithPath:dbPath]; [databaseQueueinDatabase:^(FMDatabase*db){ [dbexecuteUpdate:@"insertintouservalues(?,?)",@"Ren",@"Male",[NSNumbernumberWithInt:20]]; }]; [databaseQueueclose]; } 总结

以上是内存溢出为你收集整理的数据持久化(三)使用第三方类库FMDB全部内容,希望文章能够帮你解决数据持久化(三)使用第三方类库FMDB所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1172582.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存