2013-03-25 17:41 261人阅读 评论(0) 收藏 举报

  1. //
  2. #import <Foundation/Foundation.h>
  3. #import "sqlite3.h"
  4. @interface Sqllib : NSObject
  5. {
  6. sqlite3 *m_sql;
  7. NSString *m_dbName;
  8. }
  9. @property(nonatomic)sqlite3*  m_sql;
  10. @property(nonatomic,retain)NSString*  m_dbName;
  11. -(id)initWithDbName:(NSString*)dbname;
  12. -(BOOL)openOrCreateDatabase:(NSString*)DbName;
  13. -(BOOL)createTable:(NSString*)sqlCreateTable;
  14. -(void)closeDatabase;
  15. -(BOOL)InsertTable:(NSString*)sqlInsert;
  16. -(BOOL)UpdataTable:(NSString*)sqlUpdata;
  17. -(NSArray*)querryTable:(NSString*)sqlQuerry;
  18. -(NSArray*)querryTableByCallBack:(NSString*)sqlQuerry;
  19. @end
  20. //
  21. #import "sqllib.h"
  22. @implementation Sqllib
  23. @synthesize m_sql;
  24. @synthesize m_dbName;
  25. -(id) initWithDbName:(NSString*)dbname
  26. {
  27. self = [super init];
  28. if (self != nil) {
  29. if ([self openOrCreateDatabase:dbname]) {
  30. [self closeDatabase];
  31. }
  32. }
  33. return self;
  34. }
  35. -(id) init
  36. {
  37. NSAssert(0,@"Never Use this.Please Call Use initWithDbName:(NSString*)");
  38. return nil;
  39. }
  40. -(void) dealloc
  41. {
  42. self.m_sql = nil;
  43. self.m_dbName =nil;
  44. [super dealloc];
  45. }
  46. //创建数据库
  47. -(BOOL)openOrCreateDatabase:(NSString*)dbName
  48. {
  49. self.m_dbName = dbName;
  50. NSArray *path =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
  51. NSString *documentsDirectory = [path objectAtIndex:0];
  52. if(sqlite3_open([[documentsDirectorystringByAppendingPathComponent:dbName] UTF8String],&m_sql) !=SQLITE_OK)
  53. {
  54. NSLog(@"创建数据库失败");
  55. return NO;
  56. }
  57. return YES;
  58. }
  59. //关闭数据库
  60. -(void)closeDatabase
  61. {
  62. sqlite3_close(self.m_sql);
  63. }
  64. //创建表
  65. -(BOOL)createTable:(NSString*)sqlCreateTable
  66. {
  67. if (![selfopenOrCreateDatabase:self.m_dbName]) {
  68. return NO;
  69. }
  70. char *errorMsg;
  71. if (sqlite3_exec (self.m_sql, [sqlCreateTable UTF8String],NULL, NULL, &errorMsg) != SQLITE_OK)
  72. {
  73. NSLog(@"创建数据表失败:%s",errorMsg);
  74. return NO;
  75. }
  76. [selfcloseDatabase];
  77. return YES;
  78. }
  79. //插入表
  80. -(BOOL)InsertTable:(NSString*)sqlInsert
  81. {
  82. if (![selfopenOrCreateDatabase:self.m_dbName]) {
  83. return NO;
  84. }
  85. char* errorMsg = NULL;
  86. if(sqlite3_exec(self.m_sql, [sqlInsertUTF8String],0, NULL, &errorMsg) ==SQLITE_OK)
  87. {
  88. [selfcloseDatabase];
  89. returnYES;
  90. }
  91. else
  92. {
  93. printf("更新表失败:%s",errorMsg);
  94. [selfcloseDatabase];
  95. return NO;
  96. }
  97. return YES;
  98. }
  99. //更新表
  100. -(BOOL)UpdataTable:(NSString*)sqlUpdata
  101. {
  102. if (![selfopenOrCreateDatabase:self.m_dbName])
  103. {
  104. return NO;
  105. }
  106. char *errorMsg;
  107. if (sqlite3_exec (self.m_sql, [sqlUpdata UTF8String],0, NULL, &errorMsg) !=SQLITE_OK)
  108. {
  109. [selfcloseDatabase];
  110. returnYES;
  111. }
  112. else
  113. {
  114. returnNO;
  115. }
  116. return YES;
  117. }
  118. //查询表
  119. -(NSArray*)querryTable:(NSString*)sqlQuerry
  120. {
  121. if (![selfopenOrCreateDatabase:self.m_dbName]) {
  122. return nil;
  123. }
  124. int row = 0;
  125. int column = 0;
  126. char*    errorMsg = NULL;
  127. char**    dbResult = NULL;
  128. NSMutableArray*    array = [[NSMutableArrayalloc] init];
  129. if(sqlite3_get_table(m_sql, [sqlQuerryUTF8String], &dbResult, &row,&column,&errorMsg ) == SQLITE_OK)
  130. {
  131. if (0 == row) {
  132. [self closeDatabase];
  133. return nil;
  134. }
  135. int index = column;
  136. for(int i =0; i < row ; i++ ) {
  137. NSMutableDictionary*    dic = [[NSMutableDictionaryalloc] init];
  138. for(int j =0 ; j < column; j++ ) {
  139. if (dbResult[index]) {
  140. NSString*    value = [[NSStringalloc] initWithUTF8String:dbResult[index]];
  141. NSString*    key = [[NSStringalloc] initWithUTF8String:dbResult[j]];
  142. [dic setObject:value forKey:key];
  143. [value release];
  144. [key release];
  145. }
  146. index ++;
  147. }
  148. [array addObject:dic];
  149. [dic release];
  150. }
  151. }else {
  152. printf("%s",errorMsg);
  153. [selfcloseDatabase];
  154. return nil;
  155. }
  156. [selfcloseDatabase];
  157. return [array autorelease];
  158. }
  159. //select
  160. int processData(void* arrayResult,int columnCount,char** columnValue,char** columnName)
  161. {
  162. int i;
  163. NSMutableDictionary* dic = [[NSMutableDictionaryalloc] init];
  164. for( i = 0 ; i < columnCount; i ++ )
  165. {
  166. if (columnValue[i])
  167. {
  168. NSString* key = [[NSStringalloc] initWithUTF8String:columnName[i]];
  169. NSString* value = [[NSStringalloc] initWithUTF8String:columnValue[i]];
  170. [dic setObject:value forKey:key];
  171. }
  172. }
  173. [(NSMutableArray*)arrayResult addObject:dic];
  174. [dic release];
  175. return 0;
  176. }
  177. //select
  178. -(NSArray*)querryTableByCallBack:(NSString*)sqlQuerry
  179. {
  180. if (![selfopenOrCreateDatabase:self.m_dbName])
  181. {
  182. return nil;
  183. }
  184. char*    errorMsg = NULL;
  185. NSMutableArray* arrayResult = [[NSMutableArrayalloc] init];
  186. if (sqlite3_exec(self.m_sql,[sqlQuerryUTF8String],processData,(void*)arrayResult,&errorMsg) !=SQLITE_OK)
  187. {
  188. printf("查询出错:%s",errorMsg);
  189. }
  190. [selfcloseDatabase];
  191. return [arrayResult autorelease];
  192. }
  193. @end
  194. //
  195. /*IOS开发中sqlite数据库的使用方法。
  196. *sqlite数据库初始化,复制到用户目录,并判断是否数据库已经存在,或者复制是否成功;
  197. *在AppDelegate.m中输入以下代码,以便复制预置数据库到指定doucment目录
  198. */
  199. - (BOOL) initializeDb
  200. {
  201. NSLog (@"initializeDB");
  202. NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  203. NSString *documentFolderPath = [searchPaths objectAtIndex: 0];
  204. //查看文件目录
  205. NSLog(@"%@",documentFolderPath);
  206. dbFilePath = [documentFolderPath stringByAppendingPathComponent:@"shopping.db"];
  207. [dbFilePath retain];
  208. if (! [[NSFileManager defaultManager] fileExistsAtPath: dbFilePath])
  209. {
  210. NSString *backupDbPath = [[NSBundle mainBundle] pathForResource:@"shopping" ofType:@"db"];
  211. if (backupDbPath == nil)
  212. {
  213. return NO;
  214. }
  215. else
  216. {
  217. BOOL copiedBackupDb = [[NSFileManager defaultManager] copyItemAtPath:backupDbPath toPath:dbFilePath error:nil];
  218. if (! copiedBackupDb)
  219. {
  220. return NO;
  221. }
  222. }
  223. }
  224. return YES;
  225. }
  226. - (void)applicationDidFinishLaunching:(UIApplication *)application
  227. {
  228. if (! [self initializeDb])
  229. {
  230. NSLog (@"couldn't init db");
  231. return;
  232. }
  233. [window addSubview:tabBarController.view];
  234. }

ios 封装sqllite3接口的更多相关文章

  1. [iOS]封装单例类

    [iOS]封装单例类 今天在学习iOS的SQLite开发,发现在需要使用SQLite的每个视图中,都需要对数据库进行打开或关闭,觉得挺麻烦的:于是在想能否写个单例类对这些操作进行封(因以前一直在使用D ...

  2. Java基础04 封装与接口

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 总结之前的内容,对象(object)指代某一事物,类(class)指代象的类型.对 ...

  3. ios 开源免费接口

    ios 开源免费接口 国家气象局提供的天气预报接口 接口地址: http://www.weather.com.cn/data/sk/101010100.html http://www.weather. ...

  4. Java基础04 封装与接口(转载)

    数据成员和方法都是同时开放给内部和外部的.在对象内部,我们利用this来调用对象的数据成员和方法.在对象外部,比如当我们在另一个类中调用对象的时,可以使用 对象.数据成员 和 对象.方法() 来调用对 ...

  5. java Vamei快速教程04 封装和接口

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 总结之前的内容,对象(object)指代某一事物,类(class)指代象的类型.对 ...

  6. QuantLib 金融计算——自己动手封装 Python 接口(1)

    目录 QuantLib 金融计算--自己动手封装 Python 接口(1) 概述 QuantLib 如何封装 Python 接口? 自己封装 Python 接口 封装 Array 和 Matrix 类 ...

  7. 使用php封装APP接口

    php封装APP接口 我们先来介绍Json的封装方法 json_encode函数传递中文的话,输出后是乱码的,针对这个问题我觉得有必要做一个解释: 其实json_encode对中文那不是乱码,只是js ...

  8. QuantLib 金融计算——自己动手封装 Python 接口(2)

    目录 QuantLib 金融计算--自己动手封装 Python 接口(2) 概述 如何封装一项复杂功能? 寻找最小功能集合的策略 实践 估计期限结构参数 修改官方接口文件 下一步的计划 QuantLi ...

  9. Unity3D 与 objective-c 之间数据交互。iOS SDK接口封装Unity3D接口

    原地址:http://www.cnblogs.com/qingjoin/p/3638915.html Unity 3D 简单工程的创建.与Xcode 导出到iOS 平台请看这 Unity3D 学习 创 ...

随机推荐

  1. HDOJ5020【几何】

    题意: 给你n个点,问有几对三个点在一条直线上 思路: 目前为止很少写的几何题- 一开始两层for没有判断重复. 然后看了一些题解说排序一下,然后枚举每个点,求一个同一斜率的个数k,ans+=(k-1 ...

  2. lightoj1079【背包】

    题意: 哈利波特抢银行... 给出n个银行,每个银行有a[i]百万和b[i]的风险.然后再给一个风险值P,不能超过P. 思路: 如果告诉你概率的小数的位数,可能这个就会不一样了... 慨率的计算,风险 ...

  3. lightoj1231【背包】

    题意: 有n种货币,已知每种货币的价值和数量. 给出一个k,问最多能组成k的方法.这个数量很大,需要mod 1e8+7. 思路: 额....这一题和上一篇的差不多,直接传送门: (此题很棒) 这里的话 ...

  4. 基础BFS+DFS poj3083

    //满基础的一道题 //最短路径肯定是BFS. //然后靠右,靠左,就DFS啦 //根据前一个状态推出下一个状态,举靠左的例子,如果一开始是上的话,那么他的接下来依次就是 左,上 , 右 , 下 // ...

  5. shell Syntax error: Bad fd number 错误解决

    最近在玩spark , 需要看一下python的spark lib 是怎么加入环境变量的. 执行: sh -x bin/pyspark 报错 + dirname bin/pyspark + cd bi ...

  6. python 列表 元组

    1.列表的基本声明和赋值 #声明一个空列表 变量 = [] 或者 变量 = list() var = [1] var2 = list() # 声明带有数据的列表 var = [1,2,3,'一','二 ...

  7. c 浮点科学计数法

    浮点数 比喻1e1 e后面跟的是10的指数(也就是1的10次方,e表示10次方),f表示浮点数 1e1表示1×10¹,其实就是10 再例如5e2f,表示5×10²,也就是500 =========== ...

  8. 【数据结构(C语言版)系列四】 串

    串类型的定义 串(或字符串)是由零个或多个字符组成的有限序列,一般记为 s = 'a1a2...an',s为串名.子串在主串中的位置以子串的第一个字符在主串中的位置来表示. 串和表示和实现——定长顺序 ...

  9. (026)[工具软件]剪切板管理:Ditto

    剪切板管理软件:Ditto官网:http://ditto-cp.sourceforge.net/

  10. AJPFX:不用递归巧妙求出1000的阶乘所有零和尾部零的个数

    package com.jonkey.test; import java.math.BigInteger; public class Test6 { /*** @param args*  需求:求出1 ...