UI进阶——SQL数据库
2016-03-16 20:15
651 查看
一、IOS开发中支持sqlite3轻量级数据库
在使用数据库之前,需要导入数据库相关的包。在这里,我们封装一个数据库对象来操作数据库:
创建单例:
//单例 +(DataBaseHelper *)ShareSingleton{ static DataBaseHelper* dataBaseHelper = nil; @synchronized(self) { if (dataBaseHelper == nil) { dataBaseHelper = [[DataBaseHelper alloc]init]; } } return dataBaseHelper; }
//创建数据库路径 -(void)dataBasePathWithName:(NSString*)fileName{ //首先判断文件是否包含后缀名 if (![fileName containsString:@".sqlite"]) { fileName = [fileName stringByAppendingString:@".sqlite"]; } //拼接完整的数据库路径 self.fileName = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:fileName]; } //创建数据库 -(sqlite3*)openOrCreateDB{ /*//存储路径 NSString* path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"db.sqlite"];*/ //创建数据库指针 sqlite3* sqlite = nil; //打开数据库 int isOpen = sqlite3_open(self.fileName.UTF8String, &sqlite); //判断 是否打开成功 if (isOpen == SQLITE_OK) { NSLog(@"打开成功"); return sqlite; }else{ NSLog(@"打开失败"); return NULL; } }
//执行无返回结果的操作 - (void)execSqlWithSQLString:(NSString*)SQLString message:(NSString*)message{ //打开数据库 sqlite3* sqlite = [self openOrCreateDB]; //执行语句 int isSuccessful = sqlite3_exec(sqlite, SQLString.UTF8String, NULL, NULL, NULL); //执行信息 if (isSuccessful == SQLITE_OK) { NSLog(@"执行成功:%@ is successful",message); }else{ NSLog(@"执行失败:%@ is fail",message); } //关闭数据库 sqlite3_close(sqlite); } //通用的查询方法 -(NSArray*)querywithSQL:(NSString*)sqlStr{ //打开数据库 sqlite3 *sqlite = [self openOrCreateDB]; //声明stmt指针 sqlite3_stmt *stament; //初始化可变数据,用来盛放所有记录 NSMutableArray* array = [[NSMutableArray alloc]init]; int result = sqlite3_prepare_v2(sqlite, sqlStr.UTF8String, -1, &stament, NULL); if (result == SQLITE_OK) { //遍历没一条执行信息,并存储 while (sqlite3_step(stament) == SQLITE_ROW) { //动态获得记录的字段数 int count = sqlite3_column_count(stament); //存放数据信息 NSMutableDictionary *mDic = [[NSMutableDictionary alloc]init]; for (int i = 0 ; i < count ; i ++) { //确定该字段的类型 int type = sqlite3_column_type(stament, i); //确定该字段的关键字 const char *name = sqlite3_column_name(stament, i); NSString *key = [NSString stringWithCString:name encoding:NSUTF8StringEncoding]; //根据类型取值 switch (type) { case SQLITE_TEXT: {//string NSString* str = [NSString stringWithCString:(const char*)sqlite3_column_text(stament, i) encoding:NSUTF8StringEncoding]; [mDic setObject:str forKey:key]; } break; case SQLITE_INTEGER: {//int NSInteger value = sqlite3_column_int(stament, i); [mDic setObject:@(value) forKey:key]; } break; case SQLITE_BLOB: { } break; default: break; } } //将记录添加到数组- [array addObject:mDic]; } //关闭数据库,释放资源 sqlite3_close(sqlite); //释放指针 sqlite3_finalize(stament); //返回该值 return array; }else{ NSLog(@"查询语句有问题"); //关闭数据库,释放资源 sqlite3_close(sqlite); //释放指针 sqlite3_finalize(stament); return array; } }
相关文章推荐
- android:finishOnTaskLaunch="true" //虽然这样设置了,但是Back键与Home键还是不同
- torque
- 给UIButton设置BackgroundColor:forState
- guice框架的入门使用
- (4.5.3.4)finished with non-zero exit value 2
- UI组件:PopupWindows的详细使用(一)
- U3D打包DLL插件 DLL Builder
- UITableView传值(自己使用)(属性,代理传值)
- iOS UITextField设置金额(钱数)输入框
- iOS--页面跳转(UITableView)
- NGUI中打字效果TypewriterEffect的一个BUG
- POJ 2229 Ultra-QuickSort 归并排序求逆序数
- Number Sequence (HDU_1711) KMP
- build模式小例子
- [ShareSDK] QuickIntegrater.jar文件各种打不开
- UITextField - 解决键盘遮住View & 密文设定 & 实例
- 今天遇到 Request failed: method not allowed (405)。 错误,特此在网上翻了翻
- 187. Repeated DNA Sequences LeetCode
- use vs require in Perl5
- UI初级 TextField