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 学习 创 ...
随机推荐
- HDOJ5020【几何】
题意: 给你n个点,问有几对三个点在一条直线上 思路: 目前为止很少写的几何题- 一开始两层for没有判断重复. 然后看了一些题解说排序一下,然后枚举每个点,求一个同一斜率的个数k,ans+=(k-1 ...
- lightoj1079【背包】
题意: 哈利波特抢银行... 给出n个银行,每个银行有a[i]百万和b[i]的风险.然后再给一个风险值P,不能超过P. 思路: 如果告诉你概率的小数的位数,可能这个就会不一样了... 慨率的计算,风险 ...
- lightoj1231【背包】
题意: 有n种货币,已知每种货币的价值和数量. 给出一个k,问最多能组成k的方法.这个数量很大,需要mod 1e8+7. 思路: 额....这一题和上一篇的差不多,直接传送门: (此题很棒) 这里的话 ...
- 基础BFS+DFS poj3083
//满基础的一道题 //最短路径肯定是BFS. //然后靠右,靠左,就DFS啦 //根据前一个状态推出下一个状态,举靠左的例子,如果一开始是上的话,那么他的接下来依次就是 左,上 , 右 , 下 // ...
- shell Syntax error: Bad fd number 错误解决
最近在玩spark , 需要看一下python的spark lib 是怎么加入环境变量的. 执行: sh -x bin/pyspark 报错 + dirname bin/pyspark + cd bi ...
- python 列表 元组
1.列表的基本声明和赋值 #声明一个空列表 变量 = [] 或者 变量 = list() var = [1] var2 = list() # 声明带有数据的列表 var = [1,2,3,'一','二 ...
- c 浮点科学计数法
浮点数 比喻1e1 e后面跟的是10的指数(也就是1的10次方,e表示10次方),f表示浮点数 1e1表示1×10¹,其实就是10 再例如5e2f,表示5×10²,也就是500 =========== ...
- 【数据结构(C语言版)系列四】 串
串类型的定义 串(或字符串)是由零个或多个字符组成的有限序列,一般记为 s = 'a1a2...an',s为串名.子串在主串中的位置以子串的第一个字符在主串中的位置来表示. 串和表示和实现——定长顺序 ...
- (026)[工具软件]剪切板管理:Ditto
剪切板管理软件:Ditto官网:http://ditto-cp.sourceforge.net/
- AJPFX:不用递归巧妙求出1000的阶乘所有零和尾部零的个数
package com.jonkey.test; import java.math.BigInteger; public class Test6 { /*** @param args* 需求:求出1 ...