iOS 开发之封装一个 sqlite3 数据库
新建一个类 DataManager
在 DataManager.h 里面:
// DataManager.h
// 数据库
//
// Created by 杨鹏飞 on 15/8/12.
// Copyright (c) 2015年 杨鹏飞. All rights reserved.
#import <Foundation/Foundation.h>
#import <sqlite3.h>
@interface DataManager : NSObject
{
sqlite3 *db;
}
+ (instancetype)shareManager;
// 创建数据库表格的方法
// @param 需要传一个 sql 语句
// @return yes 建表成功 no 建表失败
- (BOOL)createTableWithsql:(NSString *)sql;
// 插入数据
// @param 需要传一个 sql 语句
// @return yes 插入成功 no 插入失败
- (BOOL)insertMessageWithsql:(NSString *)sql;
// 删除数据
// @param 需要传一个 sql 语句
// @return yes 删除成功 no 删除失败
- (BOOL)deleteMessageWithsql:(NSString *)sql;
// 修改数据
// @param 需要传一个 sql 语句
// @return yes 修改成功 no 修改失败
- (BOOL)modifyMessageWithsql:(NSString *)sql;
// 查询数据库
// @param sql 需要传一个 sql 语句
// @param obj 要查询的值
// @param column 要查询的字段
// @return 查询的结果
- (NSArray *)queryMessageWithSQL:(NSString *)sql andObject:(NSString *)obj ;
@end
在 DataManager.m 里面:
// DataManager.m
// 数据库
//
// Created by 杨鹏飞 on 15/8/12.
// Copyright (c) 2015年 杨鹏飞. All rights reserved.
#import "DataManager.h"
static DataManager *manager = nil;
@implementation DataManager
+ (instancetype)shareManager
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
manager = [[DataManager alloc]init];
});
return manager;
}
- (int)openDB
{
// 打开数据库
NSString *dbPath = [ [ NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject ] stringByAppendingPathComponent:@"数据库.sqlite" ];
NSLog(@"%@",dbPath);
// 打开数据库
int result = sqlite3_open( [ dbPath UTF8String ] , &db );
return result;
}
//关闭数据库
- (int)closeDB
{
return sqlite3_close(db);
}
// 建表
- (BOOL)createTableWithsql:(NSString *)sql
{
if ( [self openDB]==SQLITE_OK )
{
char *error;
int result= sqlite3_exec(db, [sql UTF8String], NULL, NULL, &error);
[ self closeDB ];
if (result == SQLITE_OK) {
NSLog(@"建表成功");
return YES;
}else{
NSLog(@"%s",error);
return NO;
}
}
return NO;
}
// 插入数据
- (BOOL)insertMessageWithsql:(NSString *)sql
{
if ([self openDB]==SQLITE_OK) {
char *error ;
int result = sqlite3_exec(db, [ sql UTF8String ], NULL, NULL, &error);
[ self closeDB ];
if (result)
{
return YES;
}
else
{
return NO;
}
}
return NO;
}
// 删除数据
- (BOOL)deleteMessageWithsql:(NSString *)sql
{
if ([self openDB]==SQLITE_OK) {
char *error ;
int result = sqlite3_exec(db, [ sql UTF8String ], NULL, NULL, &error);
[ self closeDB ];
if (result)
{
return YES;
}
else
{
return NO;
}
}
return NO;
}
// 修改数据
- (BOOL)modifyMessageWithsql:(NSString *)sql
{
if ([self openDB]==SQLITE_OK) {
char *error ;
int result = sqlite3_exec(db, [ sql UTF8String ], NULL, NULL, &error);
[ self closeDB ];
if (result)
{
return YES;
}
else
{
return NO;
}
}
return NO;
}
// 查询数据
- (NSArray *)queryMessageWithSQL:(NSString *)sql andObject:(NSString *)obj
{
// 打开数据库
if ([self openDB]==SQLITE_OK )
{
// 声明一个结果集 查询的结果 存在结果集 里面
sqlite3_stmt *stmt;
// 校验 SQL 语句是否正确
// int nByte 为 -1 的时候 不限制 查询的长度
if ( sqlite3_prepare_v2(db, [sql UTF8String] , -1, &stmt, NULL )==SQLITE_OK )
{
// 绑定要查询的内容
NSString *searchContent = [NSString stringWithFormat:@"%%%@%%",obj];
if (sqlite3_bind_text(stmt, 1, [searchContent UTF8String], -1, NULL)==SQLITE_OK )
{
// resultlist 用来装查询到的所有数据
NSMutableArray *resultList =[ NSMutableArray array ];
// 循环 查询
while (sqlite3_step(stmt)==SQLITE_ROW)
{
// icol 查询到的 这一条数据的列数
char *name = (char *)sqlite3_column_text( stmt, 1);
char *phone = (char *)sqlite3_column_text( stmt,2);
char *time = (char *)sqlite3_column_text( stmt, 3 );
// 把查询到的一条数据整合到一个字典里面
NSDictionary *info = @{@"name":[NSString stringWithUTF8String:name],@"phone":[NSString stringWithUTF8String:phone],@"time":[NSString stringWithUTF8String:time] };
[resultList addObject:info];
}
[ self closeDB ];
return resultList;
}
}
}
return nil;
}
@end