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 学习 创 ...
随机推荐
- 洛谷 - P1034 - 矩形覆盖 - dfs
https://www.luogu.org/problemnew/show/P1034 可能是数据太水了瞎搞都可以过. 判断两个平行于坐标轴的矩形相交(含顶点与边相交)的代码一并附上. 记得这里的xy ...
- MFC类别概述
MFC 类别主要可分为下列数大群组: ■ General Purpose classes - 提供字符串类别.数据处理类别(如数组与串行),异 常情况处理类别.文件类别...等等. ■ Windows ...
- bzoj 1879: [Sdoi2009]Bill的挑战【状压dp】
石乐志写容斥--其实状压dp就行 设f[i][s]表示前i个字母,匹配状态为s,预处理g[i][j]为第i个字母是j的1~n的集合,转移的时候枚举26个字母转移,最后答案加上正好有k个的方案即可 #i ...
- git自动化部署+rsync文件同步
1.进入线上git裸仓库 2.编辑post-receive #!/bin/sh unset GIT_DIR cd /var/www/ git pull http://web:xxxxxxx@120.3 ...
- git 项目切换分支 命令
在项目开发总,一般都会用到git管理工具,有的公司可能还是用的svn:不管怎么样.用的顺手就行: 来说下git 的基本使用 git clone + 项目地址链接: 可以把项目克隆到本地: 然后一般顺序 ...
- Django使用dwebsocket来通信,服务器报错[Error 10038]
记录这次Django踩得最大的一次坑,没有之一.前前后后困扰了一周. 在使用Django的dwebsocket模块建立websocket时,不管是前端主动关闭,还是页面刷新,还是页面关闭.服务端均会报 ...
- 封装jQuery插件实现TAB切换
先上效果图: 直接上代码: index.html <!DOCTYPE html> <html lang="en"> <head> <met ...
- 1-16使用try-catch捕捉异常
处理异常 可以使用try-catch-处理异常,例如之前的程序可以使用try-catch-处理 package com.monkey1024.exception; import java.io.Fil ...
- javascript简单的表单验证
<html> <head> <title>用户登录</title> <script language="javascript" ...
- Problem E: 穷游中国在统题 优先队列 + 模拟
http://www.gdutcode.sinaapp.com/problem.php?cid=1049&pid=4 Problem E: 穷游中国在统题 Description Travel ...