博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios开发:使用sqlite存储数据
阅读量:7191 次
发布时间:2019-06-29

本文共 6371 字,大约阅读时间需要 21 分钟。

hot3.png

如果想在ios本地存储复杂的数据结构,sqlite是不错的选择。 使用sqlite,首先需要在项目中引入类库libsqlite3 引入之后,开始写dao类,操作数据库,下面是代码示例: dao.h

(void)createEditableCopyOfDatabaseIfNeeded;//插入菜肴的方法- (int) create: (Cai *)model;//删除菜肴的方法- (int) remove: (Cai *)model;//修改菜肴的方法//- (int) modify: (Cai *)model;//查询所有数据的方法- (NSMutableArray *) findAll;//按照分类id查询数据的方法- (NSMutableArray *) findByClassId: (Cai *)model;@end

dao.m文件

#import "CaiDao.h"@implementation CaiDaostatic CaiDao *sharedManager = nil;+ (CaiDao*)sharedManager{    static dispatch_once_t once;    dispatch_once(&once, ^{                sharedManager = [[self alloc] init];        [sharedManager createEditableCopyOfDatabaseIfNeeded];                    });    return sharedManager;}- (NSString *)applicationDocumentsDirectoryFile{        NSString *documentDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];    NSString *path = [documentDirectory stringByAppendingPathComponent:DBFILE_NAME];        return path;}- (void)createEditableCopyOfDatabaseIfNeeded {    NSString *writableDBPath = [self applicationDocumentsDirectoryFile];        if (sqlite3_open([writableDBPath UTF8String], &db) != SQLITE_OK){        sqlite3_close(db);        NSAssert(NO, @"数据库打开失败...");    } else{        char *err;        NSString *createSQL = [NSString stringWithFormat:@"create table if not exists Cai (id text primary key, foodName text, classId text);"];        if(sqlite3_exec(db, [createSQL UTF8String], nil, nil, &err) != SQLITE_OK){            sqlite3_close(db);            NSAssert(NO, @"建表失败, %s", err);        }        sqlite3_close(db);    }}//插入菜肴-(int) create:(Cai *)model{        NSString *path = [self applicationDocumentsDirectoryFile];        if (sqlite3_open([path UTF8String], &db) != SQLITE_OK) {        sqlite3_close(db);        NSAssert(NO,@"数据库打开失败。");    } else {                NSString *sqlStr = @"INSERT OR REPLACE INTO cai (id, foodName, classId) VALUES (?,?,?)";                sqlite3_stmt *statement;        //预处理过程        if (sqlite3_prepare_v2(db, [sqlStr UTF8String], -1, &statement, nil) == SQLITE_OK) {                        //绑定参数开始            sqlite3_bind_text(statement, 1, [model.id UTF8String], -1, nil);            sqlite3_bind_text(statement, 2, [model.foodName UTF8String], -1, nil);            sqlite3_bind_text(statement, 3, [model.classId UTF8String], -1, nil);                        //执行插入            if (sqlite3_step(statement) != SQLITE_DONE) {                NSAssert(NO, @"插入数据失败。");            }        }else {            NSAssert1(0,@"Error:%s",sqlite3_errmsg(db));        }                sqlite3_finalize(statement);        sqlite3_close(db);    }        return 0;}//根据菜肴种类id查询菜肴列表- (NSMutableArray *) findByClassId:(Cai *)model{    NSString *path = [self applicationDocumentsDirectoryFile];    NSMutableArray *listData = [[NSMutableArray alloc] init];        if (sqlite3_open([path UTF8String], &db) != SQLITE_OK){        sqlite3_close(db);        NSAssert(NO, @"数据库打开失败...");    } else{        NSString *qsql = @"select id, foodName, classId from cai where classId = ?";        sqlite3_stmt * statement;        //预处理过程        if(sqlite3_prepare_v2(db, [qsql UTF8String], -1, &statement, nil) == SQLITE_OK){            //准备参数            NSString *classid = model.classId;                        //绑定参数开始            sqlite3_bind_text(statement, 1, [classid UTF8String], -1, nil);                        //执行            while (sqlite3_step(statement) == SQLITE_ROW){                char *cai_id = (char *) sqlite3_column_text(statement, 0);                NSString *caiId = [[NSString alloc] initWithUTF8String:cai_id];                                char *food_name = (char *) sqlite3_column_text(statement, 1);                NSString *foodName = [[NSString alloc] initWithUTF8String:food_name];                                char *class_id = (char *) sqlite3_column_text(statement, 2);                NSString *classId = [[NSString alloc] initWithUTF8String:class_id];                                Cai *cai = [[Cai alloc] init];                cai.id = caiId;                cai.foodName = foodName;                cai.classId = classId;                                [listData addObject:cai];            }        }        sqlite3_finalize(statement);        sqlite3_close(db);    }        return listData;}//查询所有菜肴列表- (NSMutableArray *) findAll{    NSString *path = [self applicationDocumentsDirectoryFile];    NSMutableArray *listData = [[NSMutableArray alloc] init];        if (sqlite3_open([path UTF8String], &db) != SQLITE_OK){        sqlite3_close(db);        NSAssert(NO, @"数据库打开失败...");    } else{        NSString *qsql = @"select id, foodName, classId from cai";        sqlite3_stmt * statement;        //预处理过程        if(sqlite3_prepare_v2(db, [qsql UTF8String], -1, &statement, nil) == SQLITE_OK){                        //执行            while (sqlite3_step(statement) == SQLITE_ROW){                char *cai_id = (char *) sqlite3_column_text(statement, 0);                NSString *caiId = [[NSString alloc] initWithUTF8String:cai_id];                                char *food_name = (char *) sqlite3_column_text(statement, 1);                NSString *foodName = [[NSString alloc] initWithUTF8String:food_name];                                char *class_id = (char *) sqlite3_column_text(statement, 2);                NSString *classId = [[NSString alloc] initWithUTF8String:class_id];                                Cai *cai = [[Cai alloc] init];                cai.id = caiId;                cai.foodName = foodName;                cai.classId = classId;                                [listData addObject:cai];            }        }        sqlite3_finalize(statement);        sqlite3_close(db);    }        return listData;}@end

其中用到的model Cai类:

#import 
@interface Cai : NSObject@property NSString *id;@property NSString *foodName;@property NSString *classId;@property NSString *price;@property NSString *foodPinyin;@property NSString *sujima;@end

在需要插入数据或者取出数据的地方这样写:

CaiDao *dao = [CaiDao sharedManager];    Cai *cai = [[Cai alloc] init];    cai.id = @"111";    cai.foodName = @"红烧排骨";    cai.classId = @"recai";    [dao create:cai];        NSMutableArray *array = [dao findAll];    for(Cai *c in array)    {        [[[Utils alloc] init] showAlert:c.foodName :self];    }

大功告成!

转载于:https://my.oschina.net/u/1011854/blog/513480

你可能感兴趣的文章
win8 解析json数据模板 XMl解析数据
查看>>
Android原生代码与html5交互
查看>>
hibernate.cfg.xml配置
查看>>
将零散文件使用ICSharpCode.SharpZipLib压缩打包后一次性下载
查看>>
Python 爬取简单网页
查看>>
【机器学习】--xgboost初始之代码实现分类
查看>>
【强化学习篇】--强化学习从初识到应用
查看>>
获取图片
查看>>
过滤器
查看>>
软件工程个人作业02(四则运算)
查看>>
jQuery自动完成点击html元素
查看>>
关于随机数
查看>>
《世界是数字的》读书笔记
查看>>
LeetCode开心刷题第七天——13RomanToInteger14 Longest Common Prefix
查看>>
php中直接执行mysqli_init()也是报Property access is not allowed yet的错误。
查看>>
领导讲话笔记 记录(游戏编辑器)
查看>>
"ApplicationDbContext"(泛指之类的数据库上下文模型)上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库。...
查看>>
Django Model 基础数据库操作应用
查看>>
Java ConcurrentModificationException异常原因和解决方法[转载]
查看>>
单例模式防止反射和反序列化
查看>>