若是想在ios本地存储复杂的数据结构,sqlite是不错的选择。 使用sqlite,首先须要在项目中引入类库libsqlite3 引入以后,开始写dao类,操做数据库,下面是代码示例: dao.hios
(void)createEditableCopyOfDatabaseIfNeeded; //插入菜肴的方法 - (int) create: (Cai *)model; //删除菜肴的方法 - (int) remove: (Cai *)model; //修改菜肴的方法 //- (int) modify: (Cai *)model; //查询全部数据的方法 - (NSMutableArray *) findAll; //按照分类id查询数据的方法 - (NSMutableArray *) findByClassId: (Cai *)model; @end
dao.m文件sql
#import "CaiDao.h" @implementation CaiDao static 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 <Foundation/Foundation.h> @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]; }
大功告成!app