ios 封装sqllite3接口

时间:2023-03-09 06:34:50
ios 封装sqllite3接口

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. }