c_cpp sqlite3的简易封装
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp sqlite3的简易封装相关的知识,希望对你有一定的参考价值。
//
// DataBaseHandler.m
// 代码:http://www.jianshu.com/p/a02479cc5e15
//
#import "DataBaseHandler.h"
@implementation DataBaseHandler
+ (DataBaseHandler *)shareInstance
{
// 当第一次执行的时候会产生一个空指针
static DataBaseHandler *dbHandler = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// 对指针进行判断, 当第一次执行的时候创建一个对象
if (dbHandler == nil) {
dbHandler = [[DataBaseHandler alloc] init];
}
});
// 无论是创建的和已经存在的, 都在这里直接return除去
return dbHandler;
}
- (void)openDb:(NSString *)dbname text:(NSString *)text
{
NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *dbPath = [docPath stringByAppendingString:dbname];
// 参数1: 数据库文件存储的路径
// 参数2: 数据库dbPoint指针地址
// 返回值: 执行sqlite函数的结果(int类型)
int result = sqlite3_open([dbPath UTF8String], &dbPoint);
// 利用封装的方法判断结果
[self judgeResult:result text:text];
}
- (void)executeNonReturnValue:(NSString *)sql text:(NSString *)text
{
int result = sqlite3_exec(dbPoint, [sql UTF8String], NULL, NULL, NULL);
[self judgeResult:result text:text];
}
- (NSArray *)executeHaveReturnValue:(NSString *)sql
{
// 创建一个可变数组, 用于存储数据
NSMutableArray *rows=[NSMutableArray array];
// 创建一个数据库的替身, 存储对数据库的所有操作
sqlite3_stmt *stmt = nil;
/**
* 让数据库执行sql语句, 并把结果保存到stmt中
*
* @param dbPoint 数据库指针
* @param UTF8String] sql语句
* @param -1 限制sql语句的长度(如果是-1, 就是不限制)
* @param stmt 替身指针的地址
* @param NULL 空
*
*/
int result = sqlite3_prepare_v2(dbPoint, [sql UTF8String], -1, &stmt, NULL);
// 判断是否正确
if (SQLITE_OK == result) {
// 当sql执行成功, 遍历数据
// 循环遍历所有的结果, 每次遍历到一条数据, 都会返回sqlite_row, 如果没有数据了, 就不会返回SQLITE_ROW, 跳出循环
while (SQLITE_ROW == sqlite3_step(stmt)) {
// 取int类型的数据
int columnCount = sqlite3_column_count(stmt);
// 创建一个可变字典, 用来存储数据
NSMutableDictionary *dic=[NSMutableDictionary dictionary];
for (int i = 0; i < columnCount; i++) {
// 在循环体中去按列取数据
// 取得列名
const char *name = sqlite3_column_name(stmt, i);
// 取得某列的值
const unsigned char *value = sqlite3_column_text(stmt, i);
// 将char *字符串转为NSString字符串
dic [[NSString stringWithUTF8String:name]] = [NSString stringWithUTF8String:(const char *) value];
}
[rows addObject:dic];
}
}
// 销毁stmt替身, 把里面的操作和结果写入本地sqlite文件
sqlite3_finalize(stmt);
return rows;
}
- (void)judgeResult:(int)result text:(NSString *)text
{
if (result == SQLITE_OK) {
NSLog(@"%@成功", text);
} else {
NSLog(@"错误代码: %d", result);
NSLog(@"%@失败",text);
}
}
@end
//
// DataBaseHandler.h
// 代码:http://www.jianshu.com/p/a02479cc5e15
//
#import <Foundation/Foundation.h>
#import <sqlite3.h>
@interface DataBaseHandler : NSObject
{
sqlite3 *dbPoint;
}
// 单例的创建方法
+ (DataBaseHandler *)shareInstance;
/**
* 打开数据库
*
* @param dbname 数据库名称
*
* @text 哪个方法
*/
- (void)openDb:(NSString *)dbname text:(NSString *)text;
/**
* 执行无返回值的sql
*
* @param sql sql语句
*
* @text 哪个方法
*/
- (void)executeNonReturnValue:(NSString *)sql text:(NSString *)text;
/**
* 执行有返回值的sql
*
* @param sql sql语句
*
* @return 查询结果
*/
- (NSArray *)executeHaveReturnValue:(NSString *)sql;
/**
* 判断数据库方法执行结果
*
* @param result 调用数据库方法返回的结果
*
* @text 哪个方法
*/
- (void)judgeResult:(int)result text:(NSString *)text;
@end
以上是关于c_cpp sqlite3的简易封装的主要内容,如果未能解决你的问题,请参考以下文章
rudonSqlite{} - SQLite3简易操作类 - SQLite增删改查 - PHP工具
rudonSqlite{} - SQLite3简易操作类 - SQLite增删改查 - PHP工具
rudonSqlite{} - SQLite3简易操作类 - SQLite增删改查 - PHP工具
c_cpp sqlite3的运行时可加载扩展添加extended_errorcode()函数(但失败了。不要使用它!)