看别人的代码,觉得有些代码封装得不错,所以保留下来,希望有帮助。
操作数据库的接口部分:
#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
相关推荐
在这个项目中,我们可能会看到如何创建自定义的UICollectionViewCell来代表用户的喜好或频道,以及如何通过UICollectionViewDataSource和UICollectionViewDelegate方法填充和响应用户与视图的交互。 其次,喜好管理...
**FMDB是iOS平台上一个非常流行的SQLite数据库管理库,它为Objective-C提供了SQLite数据库操作的简单接口。在本文中,我们将深入探讨如何在iOS应用中使用FMDB进行数据存储,包括数据库的创建、数据表的建立、数据的...
5. **数据管理**:尽管没有具体的数据接口,但iOS应用通常需要处理数据存储,这可能涉及到Core Data(苹果的ORM框架)或者SQLite数据库,或者是本地文件系统操作。 6. **网络请求**:App通常需要与服务器交互获取...
本项目,名为"StudentManager",是武汉大学软件工程课程中,由oc高建华和赵小刚同学共同完成的大作业,其核心是采用Swift编程语言构建一个学生学籍管理系统。通过这个系统,可以实现对学生的基本信息、成绩、出勤等...
《iOS生活小管家Demo》是一款基于Objective-C(OC)开发的应用程序,旨在为用户日常生活提供便利。这款应用包含了多项实用功能,如本地缓存管理...源码可供参考,对于学习和提升iOS开发技能来说,这是一个宝贵的资源。
在这个特定的案例中,由于提到是用Objective-C(简称OC)编写的,我们可以推测这是一个iOS或macOS平台上的应用。Objective-C是一种面向对象的编程语言,广泛用于Apple的开发环境,如Xcode。 首先,我们要理解留言板...