ios开发:使用sqlite存储数据

若是想在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

相关文章
相关标签/搜索