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. [工具]kali-linux-2016.2 更新后

    使用官方的,会自动选择最近的服务器/etc/apt/sources.list # 就这一句就好了,不用添加一堆 deb http://http.kali.org/kali kali-rolling m ...

  2. Codeforces Round #422 (Div. 2) C. Hacker, pack your bags!(更新数组)

    传送门 题意 给出n个区间[l,r]及花费\(cost_i\),找两个区间满足 1.区间和为指定值x 2.花费最小 分析 先用vector记录(l,r,cost)和(r,l,cost),按l排序,再设 ...

  3. loj #6302. 「CodePlus 2018 3 月赛」寻找车位【线段树+单调队列】

    考虑静态怎么做:枚举右边界,然后枚举上边界,对应的下边界一定单调不降,单调栈维护每一列从当前枚举的右边界向左最长空位的长度,这样是O(nm)的 注意到n>=m,所以m<=2000,可以枚举 ...

  4. mysqldump 工具使用详解——参数选项

    mysqldump 简介 mysqldump 是一种用于逻辑备份的客户端工具,它会产生一套能够重新构建数据库或表的SQL语句.所谓逻辑备份:是利用SQL语言从数据库中抽取数据并存于二进制文件的过程.逻 ...

  5. 两年Java程序员面试经验分享,从简历制作到面试总结!

    前言 工作两年左右,实习一年左右,正式工作一年左右,其实挺尴尬的,高不成低不就.因此在面试许多公司,找到了目前最适合自己的公司之后.于是做一个关于面试的总结.希望能够给那些依旧在找工作的同学提供帮助. ...

  6. python 之 random 模块、 shutil 模块、shelve模块、 xml模块

    6.12 random 模块 print(random.random()) (0,1)----float 大于0且小于1之间的小数 print(random.randint(1,3)) [1,3] 大 ...

  7. js同过url下载文件,调用另存为弹框

    实战中,项目将文件上传到项目的根目录下,并进行保存,随后根据此文件的路径进行下载到本地磁盘 实战中,项目将文件上传到项目的根目录下,并进行保存,随后根据此文件的路径进行下载到本地磁盘 实战中,项目将文 ...

  8. Hibernate中表与表之间的关联一对多,级联保存和级联删除

    1:Hibernate的一对多操作(重点) 一对多映射配置 第一步:创建两个实体类:客户和联系人(例)以客户为一,联系人为多: package com.yinfu.entity; public cla ...

  9. Ubuntu开机之后报错结局方法

    sudo gedit /etc/default/apport 把里面的enabled=1改成enabled=,保存 201. 就是下雨也去.202. 我马上拿来.203. 孙英开飞机.204. 国华来 ...

  10. Linux--NiaoGe-Service-01

    安装环境介绍 CentOS 6.9_x86_64 我们选择的是基本安装,也即“Basic Server”. 安装完成后重启来到(runlevel 3)纯文本界面. 例题 批量创建账号:假设有5个账号x ...