数据库(sqlite3)项目实际应用

来源:互联网 发布:淘宝怎么实名认证激活 编辑:程序博客网 时间:2024/05/18 13:43

 在Xcode7.0以上版本里面,开发中如果想用数据库,就得在工程里面导入 sqlite3:

具体步骤:选择工程 -->Build Phases -->Link Binary With Libraries

导入完成后,就是怎么运用它了!

一般我会把数据库的增删改查封装成一个类,例如下面:

<span style="color:#ff0000;">这是这个类的.h文件</span>#import <Foundation/Foundation.h>#import <sqlite3.h>@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
<pre name="code" class="objc"><span style="color:#ff0000;">这是这个类的.m文件</span>
#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的使用,我所知知识尚少,如有不满意之处,敬请谅解。




0 0
原创粉丝点击