看别人的代码,觉得有些代码封装得不错,所以保留下来,希望有帮助。
操作数据库的接口部分:
#import <Foundation/Foundation.h> #import <sqlite3.h> @interface BaseDB : NSObject //创建表 - (void)createTable:(NSString *)sql; /** * 接口描述:插入数据、删除数据、修改数据 * 参数: sql: SQL语句 * 返回值:是否执行成功 * */ - (BOOL)dealData:(NSString *)sql paramsarray:(NSArray *)params; /** * 接口描述:查询数据 * 参数: sql:SQL语句 * 返回值:[ [“字段值1”,“字段值2”,“字段值3”], [“字段值1”,“字段值2”,“字段值3”], [“字段值1”,“字段值2”,“字段值3”], ] */ - (NSMutableArray *)selectData:(NSString *)sql columns:(int)number; @end
每个接口的实现部分:
#import "BaseDB.h" #define kFilename @"data.sqlite" @implementation BaseDB - (NSString *)filePath { NSString *filePath = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/%@",kFilename]; return filePath; } - (void)createTable:(NSString *)sql { sqlite3 *sqlite = nil; //打开数据库 if (sqlite3_open([self.filePath UTF8String], &sqlite) != SQLITE_OK) { NSLog(@"打开数据库失败"); sqlite3_close(sqlite); return; } //执行创建表SQL语句 char *errmsg = nil; if (sqlite3_exec(sqlite, [sql UTF8String], NULL, NULL, &errmsg) != SQLITE_OK) { NSLog(@"创建表失败:%s",errmsg); sqlite3_close(sqlite); } //关闭数据库 sqlite3_close(sqlite); } /** * 接口描述:插入数据、删除数据、修改数据 * 参数: sql: SQL语句 * 返回值:是否执行成功 * */ // INSERT INTO User(username,password,email) values(?,?,?) - (BOOL)dealData:(NSString *)sql paramsarray:(NSArray *)params { sqlite3 *sqlite = nil; sqlite3_stmt *stmt = nil; //打开数据库 if (sqlite3_open([self.filePath UTF8String], &sqlite) != SQLITE_OK) { NSLog(@"打开数据库失败"); sqlite3_close(sqlite); return NO; } //编译SQL语句 if (sqlite3_prepare_v2(sqlite, [sql UTF8String], -1, &stmt, NULL) != SQLITE_OK) { NSLog(@"SQL语句编译失败"); sqlite3_close(sqlite); return NO; } //绑定数据 for (int i=0; i<params.count; i++) { NSString *value = [params objectAtIndex:i]; sqlite3_bind_text(stmt, i+1, [value UTF8String], -1, NULL); } //执行SQL语句 if(sqlite3_step(stmt) == SQLITE_ERROR) { NSLog(@"SQL语句执行失败"); sqlite3_close(sqlite); return NO; } //关闭数据库 sqlite3_finalize(stmt); sqlite3_close(sqlite); return YES; } /** * 接口描述:查询数据 * 参数: sql:SQL语句 * 返回值:[ [“字段值1”,“字段值2”,“字段值3”], [“字段值1”,“字段值2”,“字段值3”], [“字段值1”,“字段值2”,“字段值3”], ] */ //SELECT username,password,email FROM User - (NSMutableArray *)selectData:(NSString *)sql columns:(int)number { sqlite3 *sqlite = nil; sqlite3_stmt *stmt = nil; //打开数据库 if (sqlite3_open([self.filePath UTF8String], &sqlite) != SQLITE_OK) { NSLog(@"打开数据库失败"); sqlite3_close(sqlite); return NO; } //编译SQL语句 if (sqlite3_prepare_v2(sqlite, [sql UTF8String], -1, &stmt, NULL) != SQLITE_OK) { NSLog(@"SQL语句编译失败"); sqlite3_close(sqlite); return NO; } //查询数据 int result = sqlite3_step(stmt); NSMutableArray *data = [NSMutableArray array]; while (result == SQLITE_ROW) { NSMutableArray *row = [NSMutableArray arrayWithCapacity:3]; for (int i=0; i<number; i++) { char *columnText = (char *)sqlite3_column_text(stmt, i); NSString *string = [NSString stringWithCString:columnText encoding:NSUTF8StringEncoding]; [row addObject:string]; } [data addObject:row]; result = sqlite3_step(stmt); } //关闭数据库 sqlite3_finalize(stmt); sqlite3_close(sqlite); return data; } @end
如何使用这些接口呢?
具体例子:
#import "UserDB.h" static UserDB *instnce; @implementation UserDB + (id)shareInstance {/*单例模式*/ if (instnce == nil) { instnce = [[[self class] alloc] init]; } return instnce; } - (void)createTable { NSString *sql = @"CREATE TABLE IF NOT EXISTS User (username TEXT primary key,password TEXT,age TEXT);"; [self createTable:sql]; } - (BOOL)addUser:(UserModel *)userModel { NSString *sql = @"INSERT OR REPLACE INTO User (username,password,age) VALUES (?,?,?)"; NSArray *params = [NSArray arrayWithObjects:userModel.username, userModel.password, userModel.age, nil]; return [self dealData:sql paramsarray:params]; } - (NSArray *)findUsers { NSString *sql = @"SELECT username,password,age FROM User"; NSArray *data = [self selectData:sql columns:3]; NSMutableArray *users = [NSMutableArray array]; for (NSArray *row in data) { NSString *username = [row objectAtIndex:0]; NSString *password = [row objectAtIndex:1]; NSString *age = [row objectAtIndex:2]; UserModel *user = [[UserModel alloc] init]; user.username = username; user.password = password; user.age = age; [users addObject:user]; [user release]; } return users; } @end
相关推荐
对iOS开发中使用到得SQLite3进行简单的操作,展示基本的使用方法,使用语言OC。
SQLite参考手册 SQLite参考手册 SQLite参考手册 SQLite参考手册 SQLite参考手册 SQLite参考手册 SQLite参考手册
我将sqlite3.6的在线帮助,做成了chm文件。 希望大家喜欢。 本人也发起了翻译项目,有兴趣可以使用gmail邮箱报名。 http://groups.google.com/group/sqlite-zh-doc
SQLite参考手册(chm格式) sqlite入门
SQLite3参考手册,CHM格式,包含C/C++、Java、PHP等函数接口
SQLite数据库安装方法
非常不错的SQLite中文参考资料,对于开发SQLite小型数据库有很大帮助。
android sqlite的使用方法
Windows SQLite 创建数据库 方法
SQLite库可以解析大部分标准SQL语言。但它也省去了一些特性 并且加入了一些自己的新特性
英文版的SQLite数据库资料, 很详细,包括了SQLite应用的各个方面,英文版的读起来会给你原汁原味的阅读体会。
对iOS开发中使用到得SQLite3进行简单的操作,展示基本的使用方法,使用语言Swift-OC混编。
本文实例讲述了C#解决SQlite并发异常问题的方法。分享给大家供大家参考,具体如下: 使用C#访问sqlite时,常会遇到多线程并发导致SQLITE数据库损坏的问题。 SQLite是文件级别的数据库,其锁也是文件级别的:多个线程...
这是我自己整理的FMDB框架对SQLite3数据库的封装Demo.
主要介绍了C#中增加SQLite事务操作支持与使用方法,结合实例形式分析了C#中针对SQLite事务操作的添加及使用技巧,需要的朋友可以参考下
基于sqlite-amalgamation-3280000和wxsqlite3-3.3.1重编译版本,支持Sqlite3_key和Sqlite3_rekey方法
简单方便的使用 sqlite expert图形化使用工具
SQLite数据库在嵌入式下载机中的应用研究,SQLite语法备忘录
主要介绍了C#实现Excel导入sqlite的方法,是C#程序设计中非常重要的一个实用技巧,需要的朋友可以参考下
本文实例讲述了C#操作SQLite数据库之读写数据库的方法。分享给大家供大家参考,具体如下: 这里演示读写数据库并在窗体(Form)中显示其数据,其方式为: 读: Database(SQLite) -> DataAdapter -> DataSet -> ...