重温SQLite

Posted 康义的程序员日记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重温SQLite相关的知识,希望对你有一定的参考价值。

以前都一直使用高度封装的FMDB在操作数据库,今天在重新温习一下使用原生SQLite如何对数据库进行操作,以下为原生SQLite3创建的SQLite的工具类。

#import <Foundation/Foundation.h>

@interface SQLiteManager : NSObject

+ (instancetype)shareInstance;

- (BOOL)openDB;

- (BOOL)execSQL:(NSString *)sql;
#import "SQLiteManager.h"
#import <sqlite3.h>

@interface SQLiteManager()

@property (nonatomic,assign)sqlite3 * db;

@end

@implementation SQLiteManager

static id _instance;

+ (instancetype)shareInstance{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instance = [[self alloc] init];
    });
    return _instance;
}

- (BOOL)openDB
{
    // 数据库对象
    // sqlite3 *db = nil;

    // 数据库文件存放的路径
    NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
    filePath = [filePath stringByAppendingPathComponent:@"demo.sqlite"];

    // 打开一个数据库文件:如果存在则直接打开,如果不存在,先创建在打开
    // 1> 参数一:文件路径+文件名字
    // 2> 参数二:数据库对象
    if (sqlite3_open(filePath.UTF8String, &_db) != SQLITE_OK) {
        NSLog(@"数据库打开失败");
        return NO;
    }

    // 创建表
    return [self createTable];
}

- (BOOL)createTable{
    // 1.封装创建表的语句
    NSString *createTableSQL = @"CREATE TABLE IF NOT EXISTS 't_student' ( 'id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,'name' TEXT,'age' INTEGER);";

    // 2.执行sql语句
    return [self execSQL:createTableSQL];
}

- (BOOL)execSQL:(NSString *)sql
{
    // 1> 参数一:数据库对象
    // 2> 参数二:要执行的sql语句
    return sqlite3_exec(self.db, sql.UTF8String, nil, nil, nil) == SQLITE_OK;
}

- (void)updateData{
    // 1.封装更新数据的SQL语句
    NSString * updateSQL = @"UPDATE t_student SET name = 'zs10' WHERE age > 22";

    // 2.执行更新语句
    BOOL flag = [[SQLiteManager shareInstance] execSQL:updateSQL];
    if(flag){
        NSLog(@"更新成功");
    }
}
@end