ios 封装sqllite3接口
2013-03-25 17:41 261人阅读 评论(0) 收藏 举报
- //
- #import <Foundation/Foundation.h>
- #import "sqlite3.h"
- @interface Sqllib : NSObject
- {
- sqlite3 *m_sql;
- NSString *m_dbName;
- }
- @property(nonatomic)sqlite3* m_sql;
- @property(nonatomic,retain)NSString* m_dbName;
- -(id)initWithDbName:(NSString*)dbname;
- -(BOOL)openOrCreateDatabase:(NSString*)DbName;
- -(BOOL)createTable:(NSString*)sqlCreateTable;
- -(void)closeDatabase;
- -(BOOL)InsertTable:(NSString*)sqlInsert;
- -(BOOL)UpdataTable:(NSString*)sqlUpdata;
- -(NSArray*)querryTable:(NSString*)sqlQuerry;
- -(NSArray*)querryTableByCallBack:(NSString*)sqlQuerry;
- @end
- //
- #import "sqllib.h"
- @implementation Sqllib
- @synthesize m_sql;
- @synthesize m_dbName;
- -(id) initWithDbName:(NSString*)dbname
- {
- self = [super init];
- if (self != nil) {
- if ([self openOrCreateDatabase:dbname]) {
- [self closeDatabase];
- }
- }
- return self;
- }
- -(id) init
- {
- NSAssert(0,@"Never Use this.Please Call Use initWithDbName:(NSString*)");
- return nil;
- }
- -(void) dealloc
- {
- self.m_sql = nil;
- self.m_dbName =nil;
- [super dealloc];
- }
- //创建数据库
- -(BOOL)openOrCreateDatabase:(NSString*)dbName
- {
- self.m_dbName = dbName;
- NSArray *path =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
- NSString *documentsDirectory = [path objectAtIndex:0];
- if(sqlite3_open([[documentsDirectorystringByAppendingPathComponent:dbName] UTF8String],&m_sql) !=SQLITE_OK)
- {
- NSLog(@"创建数据库失败");
- return NO;
- }
- return YES;
- }
- //关闭数据库
- -(void)closeDatabase
- {
- sqlite3_close(self.m_sql);
- }
- //创建表
- -(BOOL)createTable:(NSString*)sqlCreateTable
- {
- if (![selfopenOrCreateDatabase:self.m_dbName]) {
- return NO;
- }
- char *errorMsg;
- if (sqlite3_exec (self.m_sql, [sqlCreateTable UTF8String],NULL, NULL, &errorMsg) != SQLITE_OK)
- {
- NSLog(@"创建数据表失败:%s",errorMsg);
- return NO;
- }
- [selfcloseDatabase];
- return YES;
- }
- //插入表
- -(BOOL)InsertTable:(NSString*)sqlInsert
- {
- if (![selfopenOrCreateDatabase:self.m_dbName]) {
- return NO;
- }
- char* errorMsg = NULL;
- if(sqlite3_exec(self.m_sql, [sqlInsertUTF8String],0, NULL, &errorMsg) ==SQLITE_OK)
- {
- [selfcloseDatabase];
- returnYES;
- }
- else
- {
- printf("更新表失败:%s",errorMsg);
- [selfcloseDatabase];
- return NO;
- }
- return YES;
- }
- //更新表
- -(BOOL)UpdataTable:(NSString*)sqlUpdata
- {
- if (![selfopenOrCreateDatabase:self.m_dbName])
- {
- return NO;
- }
- char *errorMsg;
- if (sqlite3_exec (self.m_sql, [sqlUpdata UTF8String],0, NULL, &errorMsg) !=SQLITE_OK)
- {
- [selfcloseDatabase];
- returnYES;
- }
- else
- {
- returnNO;
- }
- return YES;
- }
- //查询表
- -(NSArray*)querryTable:(NSString*)sqlQuerry
- {
- if (![selfopenOrCreateDatabase:self.m_dbName]) {
- return nil;
- }
- int row = 0;
- int column = 0;
- char* errorMsg = NULL;
- char** dbResult = NULL;
- NSMutableArray* array = [[NSMutableArrayalloc] init];
- if(sqlite3_get_table(m_sql, [sqlQuerryUTF8String], &dbResult, &row,&column,&errorMsg ) == SQLITE_OK)
- {
- if (0 == row) {
- [self closeDatabase];
- return nil;
- }
- int index = column;
- for(int i =0; i < row ; i++ ) {
- NSMutableDictionary* dic = [[NSMutableDictionaryalloc] init];
- for(int j =0 ; j < column; j++ ) {
- if (dbResult[index]) {
- NSString* value = [[NSStringalloc] initWithUTF8String:dbResult[index]];
- NSString* key = [[NSStringalloc] initWithUTF8String:dbResult[j]];
- [dic setObject:value forKey:key];
- [value release];
- [key release];
- }
- index ++;
- }
- [array addObject:dic];
- [dic release];
- }
- }else {
- printf("%s",errorMsg);
- [selfcloseDatabase];
- return nil;
- }
- [selfcloseDatabase];
- return [array autorelease];
- }
- //select
- int processData(void* arrayResult,int columnCount,char** columnValue,char** columnName)
- {
- int i;
- NSMutableDictionary* dic = [[NSMutableDictionaryalloc] init];
- for( i = 0 ; i < columnCount; i ++ )
- {
- if (columnValue[i])
- {
- NSString* key = [[NSStringalloc] initWithUTF8String:columnName[i]];
- NSString* value = [[NSStringalloc] initWithUTF8String:columnValue[i]];
- [dic setObject:value forKey:key];
- }
- }
- [(NSMutableArray*)arrayResult addObject:dic];
- [dic release];
- return 0;
- }
- //select
- -(NSArray*)querryTableByCallBack:(NSString*)sqlQuerry
- {
- if (![selfopenOrCreateDatabase:self.m_dbName])
- {
- return nil;
- }
- char* errorMsg = NULL;
- NSMutableArray* arrayResult = [[NSMutableArrayalloc] init];
- if (sqlite3_exec(self.m_sql,[sqlQuerryUTF8String],processData,(void*)arrayResult,&errorMsg) !=SQLITE_OK)
- {
- printf("查询出错:%s",errorMsg);
- }
- [selfcloseDatabase];
- return [arrayResult autorelease];
- }
- @end
- //
- /*IOS开发中sqlite数据库的使用方法。
- *sqlite数据库初始化,复制到用户目录,并判断是否数据库已经存在,或者复制是否成功;
- *在AppDelegate.m中输入以下代码,以便复制预置数据库到指定doucment目录
- */
- - (BOOL) initializeDb
- {
- NSLog (@"initializeDB");
- NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
- NSString *documentFolderPath = [searchPaths objectAtIndex: 0];
- //查看文件目录
- NSLog(@"%@",documentFolderPath);
- dbFilePath = [documentFolderPath stringByAppendingPathComponent:@"shopping.db"];
- [dbFilePath retain];
- if (! [[NSFileManager defaultManager] fileExistsAtPath: dbFilePath])
- {
- NSString *backupDbPath = [[NSBundle mainBundle] pathForResource:@"shopping" ofType:@"db"];
- if (backupDbPath == nil)
- {
- return NO;
- }
- else
- {
- BOOL copiedBackupDb = [[NSFileManager defaultManager] copyItemAtPath:backupDbPath toPath:dbFilePath error:nil];
- if (! copiedBackupDb)
- {
- return NO;
- }
- }
- }
- return YES;
- }
- - (void)applicationDidFinishLaunching:(UIApplication *)application
- {
- if (! [self initializeDb])
- {
- NSLog (@"couldn't init db");
- return;
- }
- [window addSubview:tabBarController.view];
- }
ios 封装sqllite3接口的更多相关文章
- [iOS]封装单例类
[iOS]封装单例类 今天在学习iOS的SQLite开发,发现在需要使用SQLite的每个视图中,都需要对数据库进行打开或关闭,觉得挺麻烦的:于是在想能否写个单例类对这些操作进行封(因以前一直在使用D ...
- Java基础04 封装与接口
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 总结之前的内容,对象(object)指代某一事物,类(class)指代象的类型.对 ...
- ios 开源免费接口
ios 开源免费接口 国家气象局提供的天气预报接口 接口地址: http://www.weather.com.cn/data/sk/101010100.html http://www.weather. ...
- Java基础04 封装与接口(转载)
数据成员和方法都是同时开放给内部和外部的.在对象内部,我们利用this来调用对象的数据成员和方法.在对象外部,比如当我们在另一个类中调用对象的时,可以使用 对象.数据成员 和 对象.方法() 来调用对 ...
- java Vamei快速教程04 封装和接口
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 总结之前的内容,对象(object)指代某一事物,类(class)指代象的类型.对 ...
- QuantLib 金融计算——自己动手封装 Python 接口(1)
目录 QuantLib 金融计算--自己动手封装 Python 接口(1) 概述 QuantLib 如何封装 Python 接口? 自己封装 Python 接口 封装 Array 和 Matrix 类 ...
- 使用php封装APP接口
php封装APP接口 我们先来介绍Json的封装方法 json_encode函数传递中文的话,输出后是乱码的,针对这个问题我觉得有必要做一个解释: 其实json_encode对中文那不是乱码,只是js ...
- QuantLib 金融计算——自己动手封装 Python 接口(2)
目录 QuantLib 金融计算--自己动手封装 Python 接口(2) 概述 如何封装一项复杂功能? 寻找最小功能集合的策略 实践 估计期限结构参数 修改官方接口文件 下一步的计划 QuantLi ...
- Unity3D 与 objective-c 之间数据交互。iOS SDK接口封装Unity3D接口
原地址:http://www.cnblogs.com/qingjoin/p/3638915.html Unity 3D 简单工程的创建.与Xcode 导出到iOS 平台请看这 Unity3D 学习 创 ...
随机推荐
- bzoj 3232: 圈地游戏【分数规划+最小割】
数组开小导致TTTTTLE-- 是分数规划,设sm为所有格子价值和,二分出mid之后,用最小割来判断,也就是判断sm-dinic()>=0 这个最小割比较像最大权闭合子图,建图是s像所有点连流量 ...
- MyEclipse中安装SVN插件的最有效的方法
(1)下载svn插件:http://subclipse.tigris.org/files/documents/906/49209/site-1.8.8.zip (2)解压svn包,找到其中的两个文件夹 ...
- 我人生中的第一场Java面试
1.说起我的第一次Java面试,我不禁回想起我大学时参加校园招聘的那段日子,那时候我还是本科生,由于不是科班出身,只学过一点点Java皮毛,所以那时候对于找Java工作并没有什么概念,只是以为上过Ja ...
- 搜狗输入法ubuntu
1.下载搜狗输入法的安装包 下载地址为:http://pinyin.sogou.com/linux/ ,如下图,要选择与自己系统位数一致的安装包,我的系统是64位,所以我下载64位的安装包 2.按键C ...
- NowCoder数列
题目:https://www.nowcoder.com/questionTerminal/0984adf1f55a4ba18dade28f1ab15003 #include <iostream& ...
- 接口测试postman和Jmeter
接口测试属于功能测试的范畴,一般来说分为两种,一种是程序内部的接口,一种是系统对外的接口. postman测试接口 1. get请求: (1) 直接在浏览器中输入接口地址+?+参数 (2)使用post ...
- _bzoj1191 [HNOI2006]超级英雄Hero【构图 并查集】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1191 以锦囊作为节点,问题作为边“一步一步”构图,当一个时刻,某个联通块中边数>点数, ...
- ui自动化测试的意义与理解
分层测试的思想 分层测试(有的也叫测试金字塔)是最近几年慢慢流行.火热起来的,也逐渐得到了大家的认可,大家应该已经比较熟悉分层测试的思想了,不太了解的可以自行找一些相应的渠道去补充一下上下文的知识. ...
- AJPFX浅谈Java新手问题之缺少良好的编程习惯
★随意地命名 有些新手写程序,当需要定义某个变量名(也可能是函数名.类名.包名等)时,随意地一敲键盘,名字就起好了......若干星期后,碰到某 bug,再来看自己写的代码时,心中暗自嘀咕:“这代码是 ...
- JS内置对象练习(慕课网题目)
效果图: XXXX年XX月X日 星期X--班级总分为:81 格式要求: 1.显示打印的日期. 格式为类似“XXXX年XX月XX日 星期X” 的当前的时间. 2.计算出该班级的平均分(保留整数). 同学 ...