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 学习 创 ...
随机推荐
- 洛谷 - P2887 - 防晒霜Sunscreen - 贪心
https://www.luogu.org/problemnew/show/P2887 感觉可以: 把防晒霜拆点限制流量为瓶数,奶牛拆点限制流量为1,当某个防晒霜与奶牛匹配时连一条边,求最大流.但是这 ...
- Codeforces - Gym102028 - 2018 Jiaozuo Regional Contest
http://codeforces.com/gym/102028 A. Xu Xiake in Henan Province 看起来像水题.乱搞一下,还真是. #include<bits/std ...
- hdoj2795【未完待续】
题意: 给你一个矩形h*w(h,w都是1e9),然后给你n个询问,每个询问带一个1*wi矩形,问你这个给定矩形能放在第几行(从1-h下来).如果最终放不下了,就输出-1. 比如案例: 3 5 5 2 ...
- hbase-shell + hbase的java api
本博文的主要内容有 .HBase的单机模式(1节点)安装 .HBase的单机模式(1节点)的启动 .HBase的伪分布模式(1节点)安装 .HBase的伪分布模式(1节点)的启动 .HBas ...
- Centos 6.8安装 SVN
SVN SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很多版本控制服务已从CVS迁移到Subver ...
- redis查数据
1 连接服务 [root@redis1-20 ~]# telnet 127.0.0.1 6380 Trying 127.0.0.1... Connected to 127.0.0.1. Escape ...
- Zernike矩之边缘检测(附源码)
这一篇博文将讨论Zernike矩在边缘检测中的应用,关于Zernike矩的基本概念,可以参看<Zernike矩之图像重建(附源码> 源码下载 参考: [4] Ghosal S, Mehro ...
- jmeter(二十)JMeter中返回Json数据的处理方法
Json 作为一种数据交换格式在网络开发,特别是 Ajax 与 Restful 架构中应用的越来越广泛.而 Apache 的 JMeter 也是较受欢迎的压力测试工具之一,但是它本身没有提供对于 Js ...
- C#方法拓展
作用: “扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.” 要求: 1.拓展方法必须是在一个非嵌套.非泛型的静态类中定义.2.他至少有一个参数.3. ...
- [转]EntityFramework之领域驱动设计实践
本文转自:http://www.cnblogs.com/daxnet/archive/2010/11/02/1867392.html Entity Framework之领域驱动设计实践 EntityF ...