看别人的代码,觉得有些代码封装得不错,所以保留下来,希望有帮助。
操作数据库的接口部分:
#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开发中使用Objective-C进行SQLite3基本操作的方法。理解并掌握这些知识点,能够帮助开发者有效地管理和操作应用程序中的数据。在实际开发中,还应注意数据安全、线程同步等问题,确保程序的稳定性和可靠...
通过`Class.forName("org.sqlite.JDBC")`加载驱动,然后使用`Connection conn = DriverManager.getConnection("jdbc:sqlite:/path/to/database")`建立连接,之后可以使用标准的JDBC方法执行SQL操作。 在PHP中,可以...
SQLite参考手册 SQLite参考手册 SQLite参考手册 SQLite参考手册 SQLite参考手册 SQLite参考手册 SQLite参考手册
我将sqlite3.6的在线帮助,做成了chm文件。 希望大家喜欢。 本人也发起了翻译项目,有兴趣可以使用gmail邮箱报名。 http://groups.google.com/group/sqlite-zh-doc
这份"SQLite参考手册(chm格式)"是学习和使用SQLite的重要参考资料,包含了对SQLite数据库系统的详细描述和技术指导。 SQLite支持标准的SQL语法,包括数据定义语言(DDL)用于创建和修改数据库结构,数据操纵语言...
这份"英文版SQLite数据的参考资料"提供了全面深入的SQLite知识,适合对SQLite感兴趣的开发者或者需要深入理解SQLite内部机制的技术人员。 首先,SQLite的核心特性在于它的嵌入式设计。它不需要单独的服务器进程,...
在本资料包中,你将找到关于SQLite 3.0版本的详细信息,包括其基本语法和参考手册,这对于理解和操作SQLite数据库至关重要。 首先,`sqlite.chm`文件是SQLite的帮助文件,通常包含了全面的API参考、错误代码、函数...
这本书册“中文SQLite参考书册”是一个宝贵的资源,它涵盖了SQLite的基础知识到高级特性,为开发者提供了全面的指导。以下是一些主要的知识点: 1. **SQLite架构**:SQLite作为一个嵌入式数据库,不依赖于单独的...
### SQLite数据库安装与基本操作详解 ...此外,还提到了安装SQLiteBrowser可视化工具的方法,进一步提高了SQLite数据库的易用性。通过这些基本操作的学习,开发者可以更加高效地利用SQLite来构建自己的应用程序。
在上面的代码中,我们使用 `openDatabase` 方法创建了一个 SQLite 数据库对象,然后返回一个对象,该对象包含了对 SQLite 数据库的基本操作。 使用示例 以下是一个使用 `lanxDB` 类的示例代码: ``` var db = new ...
在Swift中定义一个Cocoa Touch Class或Category,然后在Objective-C代码中实现SQLite操作,再在Swift中调用这些方法。确保你的Swift类或Category遵循`@objc`规则以便暴露给Objective-C。 总之,SQLite3是iOS开发中...
这个压缩包文件提供了一个特别的SQLite3版本,它经过了重编译,增加了对`Sqlite3_key`和`Sqlite3_rekey`方法的支持。这两个方法是关于数据库加密的关键功能,对于那些需要增强数据安全性的应用来说尤为重要。 `...
SQLite库可以解析大部分标准SQL语言。但它也省去了一些特性 并且加入了一些自己的新特性
6. 安装(可选):`sudo make install`,这将把SQLite库和命令行工具安装到系统默认路径。 三、编译选项 SQLite提供了一些编译选项来定制其功能和性能,例如: - `--disable-float`:禁用浮点数支持,使SQLite更加...
本文实例讲述了C#解决SQlite并发异常问题的方法。分享给大家供大家参考,具体如下: 使用C#访问sqlite时,常会遇到多线程并发导致SQLITE数据库损坏的问题。 SQLite是文件级别的数据库,其锁也是文件级别的:多个线程...
此外,注意在实际项目中,为了提高代码的可维护性和灵活性,可以考虑以下几点优化: - 使用配置文件存储数据库连接字符串,而不是硬编码在代码中。 - 对于大量数据的导入,可以使用批处理或事务来提高性能和保证数据...
下载完成后,解压缩得到的文件夹中会包含一个名为`sqlite3.exe`的可执行文件,这是SQLite的核心工具,用于创建和管理数据库。为了方便使用,建议将包含`sqlite3.exe`的目录添加到系统的环境变量中,这样可以在任意...
SQLite3 API 编程手册 SQLite3 是一个小巧的关系数据库管理系统,它提供了一个轻量级的数据库解决方案。下面是 SQLite3 API 编程手册的相关知识点: 版本 SQLite3 的最新代码和编译版本可以从 www.sqlite.org ...
VS2010连接SQLite数据库的方法与组件,主要使用System.Data.SQLite提供的组件
本文实例讲述了C#操作SQLite数据库之读写数据库的方法。分享给大家供大家参考,具体如下: 这里演示读写数据库并在窗体(Form)中显示其数据,其方式为: 读: Database(SQLite) -> DataAdapter -> DataSet -> ...