sqlite3 OC

#import "SqliteManager.h"

#import <sqlite3.h>


@interface SqliteManager ()


@property (nonatomic, assign) sqlite3 *db;


@end


/**

    sqlite3是iOS中纯C语言操作Sqlite数据库的一个库文件

 */

@implementation SqliteManager


+ (instancetype)sharedManager {

    static id instance;

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        instance = [[self alloc] init];

    });

    return instance;

}


- (BOOL)openDB {

    //获取沙盒路径,将数据库放入沙盒中

    NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];

    

    filePath = [filePath stringByAppendingPathComponent:@"my.sqlite"];

    

    //如果有队形的数据库,则打开对应的数据库,如果没有对应的数据库,则创建数据库

    /**

     参数一:文件路径,需要转换成c语言的字符串

     参数二:操作数据库的对象

     */

    if (sqlite3_open(filePath.UTF8String, &_db) != SQLITE_OK) {

        NSLog(@"打开数据库失败");

        return NO;

    }

    //如果打开成功则创建一张表,用于存放数据

    return [self createTable];

}


- (BOOL)createTable {

    

    //定义创建表SQL

    NSString *createTableSql = @"CREATE TABLE IF NOT EXISTS 't_student' ('id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,'name' TEXT,'age' INTEGER);";

    

    //执行sql语句

    return [self execSQL:createTableSql];

}


- (BOOL)execSQL:(NSString *)sql {

    

    //执行sql语句

    return sqlite3_exec(self.db, sql.UTF8String, nil, nil, nil) == SQLITE_OK;

}


- (NSArray *)querySQL:(NSString *)querySQL {

    //定义游标对象

    sqlite3_stmt *stmt = nil;

    

    //准备工作:获取查询的游标对象

    /**

     参数三:查询语句的长度,-1为自动计算

     参数四:查询游标对象的地址

     */

    if (sqlite3_prepare_v2(self.db, querySQL.UTF8String, -1, &stmt, nil) != SQLITE_OK) {

        NSLog(@"没有装备成功");

        return nil;

    }

    

    //取出某一行的数据

    NSMutableArray *tempArray = [NSMutableArray array];

    //获取字段的个数

    int count = sqlite3_column_count(stmt);

    while (sqlite3_step(stmt) == SQLITE_ROW) {

        NSMutableDictionary *dict = [NSMutableDictionary dictionary];

        

        for (int i = 0; i < count; i++) {

            //取出当前字段的名称(key)

            NSString *key = [NSString stringWithUTF8String:sqlite3_column_name(stmt, i)];

            //取出当前字段对应的值

            const char *cValue = (const char *)sqlite3_column_text(stmt, i);

            NSString *value = [NSString stringWithUTF8String:cValue];

            

            //将键值对放入字典中

            [dict setObject:value forKey:key];

        }

        

        [tempArray addObject:dict];

        

    }

    //不使用游标时需要释放对象

    sqlite3_finalize(stmt);

    return tempArray;

}


@end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值