2019独角兽企业重金招聘Python工程师标准>>>
IOS开发学习数据库文档之IOS数据库封装是本文要介绍的内容,主要来学习IOS开发中数据库的封装,具体内容来看本文详解。内容不多,主要是以代码来实现。
H文件
#import #import "sqlite3.h" &#64;interface DatabaseOperation : NSObject { sqlite3 *m_sql; NSString *m_dbName; } &#64;property(nonatomic)sqlite3* m_sql; &#64;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; &#64;end M文件 #import "DatabaseOperation.h" &#64;implementation DatabaseOperation &#64;synthesize m_sql; &#64;synthesize m_dbName; - (id) initWithDbName:(NSString*)dbname { self &#61; [super init]; if (self !&#61; nil) { if ([self openOrCreateDatabase:dbname]) { [self closeDatabase]; } } return self; } - (id) init { NSAssert(0,&#64;"Never Use this.Please Call Use initWithDbName:(NSString*)"); return nil; } - (void) dealloc { self.m_sql &#61; nil; self.m_dbName &#61;nil; [super dealloc]; } //创建数据库 -(BOOL)openOrCreateDatabase:(NSString*)dbName { self.m_dbName &#61; dbName; NSArray *path &#61;NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); NSString *documentsDirectory &#61; [path objectAtIndex:0]; if(sqlite3_open([[documentsDirectorystringByAppendingPathComponent:dbName] UTF8String],&m_sql) !&#61;SQLITE_OK) { NSLog(&#64;"创建数据库失败"); return NO; } return YES; } //创建表 -(BOOL)createTable:(NSString*)sqlCreateTable { if (![selfopenOrCreateDatabase:self.m_dbName]) { return NO; } char *errorMsg; if (sqlite3_exec (self.m_sql, [sqlCreateTable UTF8String],NULL, NULL, &errorMsg) !&#61; SQLITE_OK) { NSLog(&#64;"创建数据表失败:%s",errorMsg); return NO; } [selfcloseDatabase]; return YES; } //关闭数据库 -(void)closeDatabase { sqlite3_close(self.m_sql); } //insert -(BOOL)InsertTable:(NSString*)sqlInsert { if (![selfopenOrCreateDatabase:self.m_dbName]) { return NO; } char* errorMsg &#61; NULL; if(sqlite3_exec(self.m_sql, [sqlInsertUTF8String],0, NULL, &errorMsg) &#61;&#61;SQLITE_OK) { [selfcloseDatabase]; returnYES;} else { printf("更新表失败:%s",errorMsg); [selfcloseDatabase]; return NO; } return YES; } //updata -(BOOL)UpdataTable:(NSString*)sqlUpdata{ if (![selfopenOrCreateDatabase:self.m_dbName]) { return NO; } char *errorMsg; if (sqlite3_exec (self.m_sql, [sqlUpdata UTF8String],0, NULL, &errorMsg) !&#61;SQLITE_OK) { [selfcloseDatabase]; returnYES; }else { returnNO; } return YES; } //select -(NSArray*)querryTable:(NSString*)sqlQuerry { if (![selfopenOrCreateDatabase:self.m_dbName]) { return nil; } int row &#61; 0; int column &#61; 0; char* errorMsg &#61; NULL; char** dbResult &#61; NULL; NSMutableArray* array &#61; [[NSMutableArrayalloc] init]; if(sqlite3_get_table(m_sql, [sqlQuerryUTF8String], &dbResult, &row,&column,&errorMsg ) &#61;&#61; SQLITE_OK) { if (0 &#61;&#61; row) { [self closeDatabase]; return nil; } int index &#61; column; for(int i &#61;0; i < row ; i&#43;&#43; ) { NSMutableDictionary* dic &#61; [[NSMutableDictionaryalloc] init]; for(int j &#61;0 ; j < column; j&#43;&#43; ) { if (dbResult[index]) { NSString* value &#61; [[NSStringalloc] initWithUTF8String:dbResult[index]]; NSString* key &#61; [[NSStringalloc] initWithUTF8String:dbResult[j]]; [dic setObject:value forKey:key]; [value release]; [key release]; } index &#43;&#43;; } [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 &#61; [[NSMutableDictionaryalloc] init]; for( i &#61; 0 ; i < columnCount; i &#43;&#43; ) { if (columnValue[i]) { NSString* key &#61; [[NSStringalloc] initWithUTF8String:columnName[i]]; NSString* value &#61; [[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 &#61; NULL; NSMutableArray* arrayResult &#61; [[NSMutableArrayalloc] init]; if (sqlite3_exec(self.m_sql,[sqlQuerryUTF8String],processData,(void*)arrayResult,&errorMsg) !&#61;SQLITE_OK) { printf("查询出错:%s",errorMsg); } [selfcloseDatabase]; return [arrayResult autorelease]; } &#64;end