Oc FMDB+SQL语句
来源:互联网 发布:万达告别房地产 知乎 编辑:程序博客网 时间:2024/06/06 12:20
FMDB使用介绍
iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便。于是,就出现了一系列将SQLite API进行封装的库FMDB (https://github.com/ccgus/fmdb) 是一款简洁、易用的封装库,这一篇文章简单介绍下FMDB的使用。
一、简单说明
1.什么是FMDB
FMDB是iOS平台的SQLite数据库框架
FMDB以OC的方式封装了SQLite的C语言API
2.FMDB的优点
使用起来更加面向对象,省去了很多麻烦、冗余的c语言代码
对比苹果自带的Core Data框架,更加轻量级和灵活
提供了多线程安全的数据库操作方法,有效地防止数据混乱
FMDB PK Sqlite
优点:
对多线程的并发操作进行处理,所以是线程安全的;
以OC的方式封装了SQLite的C语言API,使用起来更加的方便;
FMDB是轻量级的框架,使用灵活。
缺点:
因为它是OC的语言封装的,只能在ios开发的时候使用,所以在实现跨平台操作的时候存在局限性。
3.FMDB的github地址
https://github.com/ccgus/fmdb
二、核心类
FMDB有三个主要的类
(1)FMDatabase
一个FMDatabase对象就代表一个单独的SQLite数据库
用来执行SQL语句
(2)FMResultSet
使用FMDatabase执行查询后的结果集
(3)FMDatabaseQueue
用于在多线程中执行多个查询或更新,它是线程安全的
1.AppDelegate.m 中的代码
#import "AppDelegate.h"#import "ViewController.h"//主控制器@interface AppDelegate ()@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //初始化 ViewController *vc = [[ViewController alloc]init]; //导航控制器 UINavigationController *nvc = [[UINavigationController alloc]initWithRootViewController:vc]; //添加图 self.window.rootViewController = nvc; return YES;}
2.导入第三方数据库 FMDB 框架包
下载地址:https://github.com/ccgus/fmdb
* 注意:要导入 libsqlite3.tbd 包 (详情请看上面图3)*
3.在 Other 模块中添加业务处理层处理 SQLite 语句
注意:如果现在拷贝到项目会报错–>原因是其他 MVC 模块中的类没有实现
控制器1 .h:
#import <Foundation/Foundation.h>#import "Model.h"#import "FMDatabase.h"@interface LoadData : NSObject//单列类+(instancetype)sharlLoadData;//添加元素-(void)AddsharlLoadData:(Model *)model;//查询-(NSMutableArray *)Marr;//删除元素-(void)deleteharlLoadData:(Model *)model;//修改元素-(void)UPsharlLoadData:(Model *)model;@end
控制器1 .M:
#import "LoadData.h"static LoadData *ld =nil;static FMDatabase *fate;@implementation LoadData//单列类+(instancetype)sharlLoadData{ //静态 staticdispatch_once_t oneet; //初始化 dispatch_once(&oneet, ^{ ld = [[LoadData alloc]init]; //定义初始化 [ld initA]; }); //返回值 return ld;}//初始化+(instancetype)allocWithZone:(struct_NSZone *)zone{ if (!ld) { //初始化 ld = [super allocWithZone:zone]; } return ld;}//浅复制-(id)copy{ return self;}//深复制-(id)mutableCopy{ return self;}//初始化数据库-(void)initA{ //创建沙盒 NSString *Ste = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)objectAtIndex:0]; //定义文件名 NSString *path = [Ste stringByAppendingPathComponent:@"HousingInfo.sqlite"]; //初始化 fate = [[FMDatabase alloc]initWithPath:path]; //判断 if ([fate open]) { //初始化 [fate executeUpdate:@"create table class (ID integer primary key, fieldMail text, fieldAddress text , fieldConsignee text , fieldPhone text , fieldNote text)"]; [fate close]; NSLog(@"成功"); }else{ NSLog(@"失败"); }}//添加元素-(void)AddsharlLoadData:(Model *)model{ //开始 [fate open]; //初始化 NSString *str = [NSString stringWithFormat:@"insert into class values (null , '%@','%@','%@','%@','%@')",model.fieldMail,model.fieldAddress,model.fieldConsignee,model.fieldPhone,model.fieldNote]; //BOOL值接受 BOOL ii = [fate executeUpdate:str]; //判断 if (ii) { NSLog(@"成功"); }else{ NSLog(@"失败"); } //关闭 [fate close];}//查询-(NSMutableArray *)Marr{ //初始化 NSMutableArray *marr = [NSMutableArray new]; //开始 [fateopen]; //初始化 FMResultSet *Set = [[FMResultSet alloc]init]; //使用set接受 Set = [fate executeQuery:@"select * from class"]; //判断 while ([Setnext]) { //初始化 Model *mm = [Modelnew]; //链接 mm.fieldMail = [Set stringForColumn:@"fieldMail"]; mm.fieldAddress = [Set stringForColumn:@"fieldAddress"]; mm.fieldConsignee = [Set stringForColumn:@"fieldConsignee"]; mm.fieldPhone = [Set stringForColumn:@"fieldPhone"]; mm.fieldNote = [Set stringForColumn:@"fieldNote"]; mm.ID = [Set intForColumn:@"ID"]; //添加到数组 [marr addObject:mm]; } //关闭 [fate close]; //返回值 return marr;}//删除元素-(void)deleteharlLoadData:(Model *)model{ //开始 [fate open]; //初始化 NSString *str = [NSString stringWithFormat:@"delete from class where ID = '%ld' ",model.ID]; //BOOL值接受 BOOL ii = [fate executeUpdate:str]; //判断 if (ii) { NSLog(@"成功"); }else{ NSLog(@"失败"); } //关闭 [fate close];}//修改元素-(void)UPsharlLoadData:(Model *)model{ //开始 [fate open]; //初始化 NSString *str = [NSString stringWithFormat:@"update class set fieldMail = '%@',fieldAddress = '%@',fieldConsignee = '%@',fieldPhone = '%@',fieldNote = '%@' where ID = '%ld'",model.fieldMail,model.fieldAddress,model.fieldConsignee,model.fieldPhone,model.fieldNote,model.ID] //BOOL值接受 BOOL ii = [fate executeUpdate:str]; //判断 if (ii) { NSLog(@"成功"); }else{ NSLog(@"失败"); } //关闭 [fate close];}@end
4.MVC–>C模块
控制器1 -主控制器 .m:
#import "ViewController.h"#import "LoadData.h"//业务处理 SQLite#import "Model.h" //保存数据#import "MyTableViewCell.h"//主控制器 cell#import "UpViewController.h"//修改信息控制器#import "AddViewController.h"//添加信息控制器@interface ViewController ()<UITableViewDelegate,UITableViewDataSource>{ UITableView *tabele; NSMutableArray *marr;}@end@implementation ViewController//将要显示-(void)viewWillAppear:(BOOL)animated{ //查询 marr = [[LoadData sharlLoadData]Marr]; //刷新 [tabele reloadData ];}- (void)viewDidLoad { [super viewDidLoad]; //定义标题 self.title =@"信息查询系统"; //初始化 tabele = [[UITableView alloc]initWithFrame:self.view.framestyle:UITableViewStylePlain]; //添加协议 tabele.delegate =self; tabele.dataSource =self; //添加到试图上 [self.view addSubview:tabele]; //定义按钮 UIBarButtonItem *right = [[UIBarButtonItem alloc]initWithTitle:@"添加"style:UIBarButtonItemStylePlain target:selfaction:@selector(click)]; //添加到导航调试 self.navigationItem.rightBarButtonItem = right;}-(void)click{ //初始化 AddViewController *add = [AddViewController new]; //跳转 [self.navigationController pushViewController:addanimated:YES];}//行数-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ returnmarr.count;}-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *cellId = @"CELLID"; //初始化 MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId]; //复用池 if (!cell) { //初始化‘ cell = [[MyTableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitlereuseIdentifier:cellId]; } //初始化 Model *mm =marr[indexPath.row]; //添加到表格上 cell.fieldMail.text = mm.fieldMail; cell.fieldAddress.text = mm.fieldAddress; cell.fieldConsignee.text = mm.fieldConsignee; cell.fieldPhone.text = mm.fieldPhone; cell.fieldNote.text = mm.fieldNote; //返回值 return cell;}//删除-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{ //添加 Model *mm =marr[ indexPath.row]; //删除 [[LoadData sharlLoadData]deleteharlLoadData:mm]; [marr removeObjectAtIndex:indexPath.row]; //刷新 [tabele reloadData];}//跳转-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ //初始化 UpViewController *up = [UpViewController new]; //添加 up.mm = marr[indexPath.row]; //修改 [[LoadData sharlLoadData]UPsharlLoadData:up.mm]; //跳转 [self.navigationController pushViewController:up animated:YES];}@end
控制器2–添加信息控制器 .m:
#import "AddViewController.h"#import "Model.h"#import "LoadData.h"@interface AddViewController ()//邮件@property (strong,nonatomic)IBOutletUITextField *fieldMail;//收货地址@property (strong,nonatomic)IBOutletUITextField *fieldAddress;//收货人@property (strong,nonatomic)IBOutletUITextField *fieldConsignee;//电话@property (strong,nonatomic)IBOutletUITextField *fieldPhone;//备注@property (strong,nonatomic)IBOutletUITextField *fieldNote;//点击添加信息- (IBAction)sss:(id)sender;@end@implementation AddViewController- (void)viewDidLoad { [superviewDidLoad];}- (IBAction)sss:(id)sender { //初始化 Model *mm = [Model new]; //链接 mm.fieldMail =self.fieldMail.text; mm.fieldAddress =self.fieldAddress.text; mm.fieldConsignee =self.fieldConsignee.text; mm.fieldPhone =self.fieldPhone.text; mm.fieldNote =self.fieldNote.text; //添加到数据库 [[LoadData sharlLoadData]AddsharlLoadData:mm]; //跳转 [self.navigationController popViewControllerAnimated:YES];}@end
控制器3–修改信息控制器 .h:
#import <UIKit/UIKit.h>@class Model;@interface UpViewController : UIViewController//定义属性@property (nonatomic ,strong)Model *mm;@end
控制器3–修改信息控制器 .m:
#import "UpViewController.h"#import "LoadData.h"#import "Model.h"@interface UpViewController ()//邮件@property (strong,nonatomic)IBOutletUITextField *fieldMail;//收货地址@property (strong,nonatomic)IBOutletUITextField *fieldAddress;//收货人@property (strong,nonatomic)IBOutletUITextField *fieldConsignee;//电话@property (strong,nonatomic)IBOutletUITextField *fieldPhone;//备注@property (strong,nonatomic)IBOutletUITextField *fieldNote;//点击修改信息- (IBAction)ssss:(id)sender;@end@implementation UpViewController- (void)viewDidLoad { [superviewDidLoad]; //将数据添加到修改页面 self.fieldMail.text =self.mm.fieldMail; self.fieldAddress.text =self.mm.fieldAddress; self.fieldConsignee.text =self.mm.fieldConsignee; self.fieldPhone.text =self.mm.fieldPhone; self.fieldNote.text =self.mm.fieldNote;}- (IBAction)ssss:(id)sender { //初始化 Model *mm = self.mm; //链接 mm.fieldMail = self.fieldMail.text; mm.fieldAddress = self.fieldAddress.text; mm.fieldConsignee = self.fieldConsignee.text; mm.fieldPhone = self.fieldPhone.text; mm.fieldNote = self.fieldNote.text; //添加 [[LoadData sharlLoadData]UPsharlLoadData:mm]; //跳转 [self.navigationController popViewControllerAnimated:YES];}@end
5.MVC–>V模块
控制器1– .h:
#import <UIKit/UIKit.h>@interface MyTableViewCell : UITableViewCell//邮件@property (nonatomic ,strong)UILabel *fieldMail;//收货地址@property (nonatomic ,strong)UILabel *fieldAddress;//收货人@property (nonatomic ,strong)UILabel *fieldConsignee;//电话@property (nonatomic ,strong)UILabel *fieldPhone;//备注@property (nonatomic ,strong)UILabel *fieldNote;@end
控制器1– .m:
#import "MyTableViewCell.h"@implementation MyTableViewCell//重写父类方法-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ //判断 if ([superinitWithStyle:stylereuseIdentifier:reuseIdentifier]) { //添加到 [self.contentView addSubview:self.fieldMail]; [self.contentView addSubview:self.fieldAddress]; [self.contentView addSubview:self.fieldConsignee]; [self.contentView addSubview:self.fieldPhone]; [self.contentView addSubview:self.fieldNote]; } //返回值 returnself;}//懒加载-//邮件-(UILabel *)fieldMail{ //判断 if (!_fieldMail) { //初始化 _fieldMail = [[UILabel alloc]initWithFrame:CGRectMake(5,5,80,44)]; } //返回值 return_fieldMail;}//懒加载-//收货地址-(UILabel *)fieldAddress{ //判断 if (!_fieldAddress) { //初始化 _fieldAddress = [[UILabel alloc]initWithFrame:CGRectMake(80,5,80,44)]; } //返回值 return_fieldAddress;}//懒加载=//收货人-(UILabel *)fieldConsignee{ //判断 if (!_fieldConsignee) { //初始化 _fieldConsignee = [[UILabel alloc]initWithFrame:CGRectMake(155,5,80,44)]; } //返回值 return_fieldConsignee;}//懒加载--//电话-(UILabel *)fieldPhone{ //判断 if (!_fieldPhone) { //初始化 _fieldPhone = [[UILabel alloc]initWithFrame:CGRectMake(220,5,80,44)]; } //返回值 return _fieldPhone;}//懒加载-(UILabel *)fieldNote{ //判断 if (!_fieldNote) { //初始化 _fieldNote = [[UILabel alloc]initWithFrame:CGRectMake(305,5,80,44)]; } //返回值 return _fieldNote;}- (void)awakeFromNib { [super awakeFromNib];}- (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated];}@end
6.MVC–>M模块
控制器1– .h:
#import <Foundation/Foundation.h>@interface Model : NSObject//定义属性//邮箱@property (nonatomic ,copy)NSString *fieldMail;//收货地址@property (nonatomic ,copy)NSString *fieldAddress;//收货人@property (nonatomic ,copy)NSString *fieldConsignee;//电话@property (nonatomic ,copy)NSString *fieldPhone;//备注@property (nonatomic ,copy)NSString *fieldNote;//@property (nonatomic ,assign)NSInteger ID;@end
控制器1– .m:
#import "Model.h"@implementation Model@end
- Oc FMDB+SQL语句
- FMDB封装,用OC方法存储model,不用写SQL语句。使用runtime获取对象属性
- iOS FMDB+SQL语句~demo
- FMDB使用和基本SQL语句
- FMDB常用的数据类型以及sql语句
- fMDB常用的数据类型以及sql语句(二)
- FMDB常用语句整合
- FMDB , sqlite 查询语句
- iOS-FMDB+runtime封装,简单实用,省去复杂的sql语句.
- FMDB处理动态插入语句
- FMDB基础(oc操作sqlite)
- OC格式化SQL语句函数,提取表名
- FMDB中常用SQL使用
- 最新Xcode7(ios9) FMDB 的常用Sql语句的使用和接入过程中遇到的错误解决
- FMDB的使用, Sqlite常用语句
- fmdb中常用的sqlite语句
- FMDB
- FMDB
- 697. Degree of an Array
- C++实现多目标遗传算法(0/1背包问题)
- n++和++n堆栈问题
- 高德地图在网页开发中的简单使用
- Internet路由协议
- Oc FMDB+SQL语句
- 水平垂直居中的几种方法
- javaweb理论
- HDU
- 从一个git仓库提交代码到另一个git仓库
- Oc 动画MermaidSwimming(美人鱼游泳)~demo
- 一条命令安装虚拟机
- tcprstat 监控数据库性能
- 用curl方法在服务器访问webservice接口,避免了开发新程序。