在Xcode7.0以上版本里面,开发中如果想用数据库,就得在工程里面导入 sqlite3:
具体步骤:选择工程 -->Build Phases -->Link Binary With Libraries
导入完成后,就是怎么运用它了!
一般我会把数据库的增删改查封装成一个类,例如下面:
这是这个类的.h文件
#import
#import
@interface HFG_DataManager : NSObject
{
sqlite3 *dm;
}
+ (instancetype) shareManger;
/**建表*/
- (BOOL) creatTableWithSql:(NSString *)sql;
/**插入数据*/
- (BOOL) insertMessageWithsql:(NSString *)sql;
/**删除数据*/
- (BOOL) deleteMessageWithSql:(NSString *)sql;
/**修改数据*/
- (BOOL) modifyMessageWithSql:(NSString *)sql;
/**查找数据*/
- (NSArray *)queryMessageWithSQL:(NSString *)sql andObject:(NSString *)obj ;
@end
这是这个类的.m文件
#import "HFG_DataManager.h"static HFG_DataManager *manager = nil;@implementation HFG_DataManager+ (instancetype) shareManger{ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ manager = [[HFG_DataManager alloc]init]; }); return manager;}/**打开数据库*/- (int) openDB{// 打开数据库 NSString *adPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"点名表.sqlite"]; NSLog(@"%@",adPath); int result = sqlite3_open([adPath UTF8String], &dm); return result;}/**关闭数据库*/- (int) closeDB{ return sqlite3_close(dm);}/**建表*/- (BOOL) creatTableWithSql:(NSString *)sql{ if ([self openDB] == SQLITE_OK) { char *error; int result = sqlite3_exec(dm, [sql UTF8String], NULL, NULL, &error); [self closeDB]; if (result == SQLITE_OK) { return YES; }else{ return NO; } } return NO;}/**插入数据*/- (BOOL) insertMessageWithsql:(NSString *)sql{ if ([self openDB] == SQLITE_OK) { char *error; int result = sqlite3_exec(dm, [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(dm, [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(dm, [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(dm, [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 *riqi = (char *)sqlite3_column_text( stmt, 1); // 把查询到的一条数据整合到一个字典里面 NSDictionary *info = @{@"studentName":[NSString stringWithUTF8String:riqi]}; [resultList addObject:info]; } [ self closeDB ]; return resultList; } } } return nil;}@end
我这个工程是 “点名”,点一次名,就少一个人,代码如下:
/**抽奖停止*/
- (void) choujiangStop{
timer.fireDate = [NSDate distantFuture];// 定时器停止
NSLog(@"抽到的人是:%@",label.text);
HFG_DataManager *manager = [HFG_DataManager shareManger]; // 初始化
// 创建表
BOOL success = [manager creatTableWithSql:@"create table if not exists user (id integer primary key autoincrement,studentName text);"];
if (success) {
NSLog(@"建表成功");
}
// 插入数据
NSString *sql = [NSString stringWithFormat:@"insert into user(studentName) values('%@');",label.text];
if ([manager insertMessageWithsql:sql] == SQLITE_OK) {
NSLog(@"插入成功");
}}
在 ViewDidload 里面,把存好的数据取出来:
NSArray *list = [manager queryMessageWithSQL:@"select id,studentName from user where studentName like ?;" andObject:@"" ];
由于我的数据库里面只存了一个字段的数据,所以SQL语句会不一样,这SQL语句视具体情况而定,其它的语句使用可以查看Sqlite3的使用,我所知知识尚少,如有不满意之处,敬请谅解。