iOS FMDB+SQL语句~demo

//联系人:石虎QQ: 1224614774昵称:嗡嘛呢叭咪哄

/**

注意点: 1.看 GIF 效果图.

2.看连线视图的效果图.

3.看实现代码(直接复制实现效果).

4.看实现代码MVC架构

5.详细鲜明代码 链接: http://blog.csdn.net/shihuboke/article/details/76832759

*/

一、GIF 效果图:

二、连线视图的效果图:

图1:

图2:

图3:

三、实现代码:

=======

================================

=======

1.AppDelegate.m 中的代码

#import"AppDelegate.h"

#import"ViewController.h"//主控制器

@interfaceAppDelegate()

@end

@implementationAppDelegate

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {

//初始化

ViewController*vc = [[ViewControlleralloc]init];

//导航控制器

UINavigationController*nvc = [[UINavigationControlleralloc]initWithRootViewController:vc];

//添加图

self.window.rootViewController= nvc;

returnYES;

}

================================

=======

2.导入第三方数据库FMDB 框架包

下载地址:https://github.com/ccgus/fmdb

注意:要导入 libsqlite3.tbd 包 (详情请看上面图3)

================================

=======

3.在 Other 模块中添加业务处理层处理 SQLite 语句

注意:如果现在拷贝到项目会报错-->原因是其他 MVC 模块中的类没有实现

控制器1 .h:

//  Created by石虎on 2017/7/6.

//  Copyright © 2017年shihu. All rights reserved.

//

#import

#import"Model.h"

#import"FMDatabase.h"

@interfaceLoadData :NSObject

//单列类

+(instancetype)sharlLoadData;

//添加元素

-(void)AddsharlLoadData:(Model*)model;

//查询

-(NSMutableArray*)Marr;

//删除元素

-(void)deleteharlLoadData:(Model*)model;

//修改元素

-(void)UPsharlLoadData:(Model*)model;

@end

控制器1 .M:

//  Created by石虎on 2017/7/6.

//  Copyright © 2017年shihu. All rights reserved.

//

#import"LoadData.h"

staticLoadData*ld =nil;

staticFMDatabase*fate;

@implementationLoadData

//单列类

+(instancetype)sharlLoadData{

//静态

staticdispatch_once_toneet;

//初始化

dispatch_once(&oneet, ^{

ld= [[LoadDataalloc]init];

//定义初始化

[ldinitA];

});

//返回值

returnld;

}

//初始化

+(instancetype)allocWithZone:(struct_NSZone*)zone{

if(!ld) {

//初始化

ld= [superallocWithZone:zone];

}

returnld;

}

//浅复制

-(id)copy{

returnself;

}

//深复制

-(id)mutableCopy{

returnself;

}

//初始化数据库

-(void)initA{

//创建沙盒

NSString*Ste = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)objectAtIndex:0];

//定义文件名

NSString*path = [StestringByAppendingPathComponent:@"HousingInfo.sqlite"];

//初始化

fate= [[FMDatabasealloc]initWithPath:path];

//判断

if([fateopen]) {

//初始化

[fateexecuteUpdate:@"create table class (ID integer primary key, fieldMail text, fieldAddress text , fieldConsignee text , fieldPhone text , fieldNote text)"];

[fateclose];

NSLog(@"成功");

}else{

NSLog(@"失败");

}

}

//添加元素

-(void)AddsharlLoadData:(Model*)model{

//开始

[fateopen];

//初始化

NSString*str = [NSStringstringWithFormat:@"insert into class values (null , '%@','%@','%@','%@','%@')",model.fieldMail,model.fieldAddress,model.fieldConsignee,model.fieldPhone,model.fieldNote];

//BOOL值接受

BOOLii = [fateexecuteUpdate:str];

//判断

if(ii) {

NSLog(@"成功");

}else{

NSLog(@"失败");

}

//关闭

[fateclose];

}

//查询

-(NSMutableArray*)Marr{

//初始化

NSMutableArray*marr = [NSMutableArraynew];

//开始

[fateopen];

//初始化

FMResultSet*Set = [[FMResultSetalloc]init];

//使用set接受

Set = [fateexecuteQuery:@"select * from class"];

//判断

while([Setnext]) {

//初始化

Model*mm = [Modelnew];

//链接

mm.fieldMail= [SetstringForColumn:@"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];

//返回值

returnmarr;

}

//删除元素

-(void)deleteharlLoadData:(Model *)model{

//开始

[fate open];

//初始化

NSString *str = [NSString stringWithFormat:@"delete from class where ID = '%ld' ",model.ID];

//BOOL值接受

BOOLii = [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值接受

BOOLii = [fate executeUpdate:str];

//判断

if(ii) {

NSLog(@"成功");

}else{

NSLog(@"失败");

}

//关闭

[fate close];

}

@end

================     ================

=======

4.MVC-->C模块

控制器1 -主控制器  .m:

//  Created by石虎on 2017/7/6.

//  Copyright © 2017年shihu. All rights reserved.

//

#import"ViewController.h"

#import"LoadData.h"//业务处理SQLite

#import"Model.h"//保存数据

#import"MyTableViewCell.h"//主控制器cell

#import"UpViewController.h"//修改信息控制器

#import"AddViewController.h"//添加信息控制器

@interfaceViewController(){

UITableView*tabele;

NSMutableArray*marr;

}

@end

@implementationViewController

//将要显示

-(void)viewWillAppear:(BOOL)animated{

//查询

marr= [[LoadDatasharlLoadData]Marr];

//刷新

[tabelereloadData];

}

- (void)viewDidLoad {

[superviewDidLoad];

//定义标题

self.title=@"信息查询系统";

//初始化

tabele= [[UITableViewalloc]initWithFrame:self.view.framestyle:UITableViewStylePlain];

//添加协议

tabele.delegate=self;

tabele.dataSource=self;

//添加到试图上

[self.viewaddSubview:tabele];

//定义按钮

UIBarButtonItem*right = [[UIBarButtonItemalloc]initWithTitle:@"添加"style:UIBarButtonItemStylePlaintarget:selfaction:@selector(click)];

//添加到导航调试

self.navigationItem.rightBarButtonItem= right;

}

-(void)click{

//初始化

AddViewController*add = [AddViewControllernew];

//跳转

[self.navigationControllerpushViewController:addanimated:YES];

}

//行数

-(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section{

returnmarr.count;

}

-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{

//初始化

MyTableViewCell*cell = [tableViewdequeueReusableCellWithIdentifier:@""];

//复用池

if(!cell) {

//初始化‘

cell = [[MyTableViewCellalloc]initWithStyle:UITableViewCellStyleSubtitlereuseIdentifier:@""];

}

//初始化

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;

//返回值

returncell;

}

//删除

-(void)tableView:(UITableView*)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath*)indexPath{

//添加

Model*mm  =marr[ indexPath.row];

//删除

[[LoadDatasharlLoadData]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:

//  Created by石虎on 2017/7/6.

//  Copyright © 2017年shihu. All rights reserved.

//

#import"AddViewController.h"

#import"Model.h"

#import"LoadData.h"

@interfaceAddViewController()

//邮件

@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

@implementationAddViewController

- (void)viewDidLoad {

[superviewDidLoad];

}

- (IBAction)sss:(id)sender {

//初始化

Model*mm = [Modelnew];

//链接

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;

//添加到数据库

[[LoadDatasharlLoadData]AddsharlLoadData:mm];

//跳转

[self.navigationControllerpopViewControllerAnimated:YES];

}

@end

================================

控制器3--修改信息控制器 .h:

//  Created by石虎on 2017/7/6.

//  Copyright © 2017年shihu. All rights reserved.

//

#import

@classModel;

@interfaceUpViewController :UIViewController

//定义属性

@property(nonatomic,strong)Model*mm;

@end

控制器3--修改信息控制器 .m:

//  Created by石虎on 2017/7/6.

//  Copyright © 2017年shihu. All rights reserved.

//

#import"UpViewController.h"

#import"LoadData.h"

#import"Model.h"

@interfaceUpViewController()

//邮件

@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

@implementationUpViewController

- (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:

//  Created by石虎on 2017/7/6.

//  Copyright © 2017年shihu. All rights reserved.

//

#import

@interfaceMyTableViewCell :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:

//  Created by石虎on 2017/7/6.

//  Copyright © 2017年shihu. All rights reserved.

//

#import"MyTableViewCell.h"

@implementationMyTableViewCell

//重写父类方法

-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString*)reuseIdentifier{

//判断

if([superinitWithStyle:stylereuseIdentifier:reuseIdentifier]) {

//添加到

[self.contentViewaddSubview:self.fieldMail];

[self.contentViewaddSubview:self.fieldAddress];

[self.contentViewaddSubview:self.fieldConsignee];

[self.contentViewaddSubview:self.fieldPhone];

[self.contentViewaddSubview:self.fieldNote];

}

//返回值

returnself;

}

//懒加载-//邮件

-(UILabel*)fieldMail{

//判断

if(!_fieldMail) {

//初始化

_fieldMail= [[UILabelalloc]initWithFrame:CGRectMake(5,5,80,44)];

}

//返回值

return_fieldMail;

}

//懒加载-//收货地址

-(UILabel*)fieldAddress{

//判断

if(!_fieldAddress) {

//初始化

_fieldAddress= [[UILabelalloc]initWithFrame:CGRectMake(80,5,80,44)];

}

//返回值

return_fieldAddress;

}

//懒加载=//收货人

-(UILabel*)fieldConsignee{

//判断

if(!_fieldConsignee) {

//初始化

_fieldConsignee= [[UILabelalloc]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 {

[superawakeFromNib];

}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {

[supersetSelected:selected animated:animated];

}

@end

================================

=======

6.MVC-->M模块

控制器1-- .h:

//  Created by石虎on 2017/7/6.

//  Copyright © 2017年shihu. All rights reserved.

//

#import

@interfaceModel :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)NSIntegerID;

@end

================================

控制器1-- .m:

//  Created by石虎on 2017/7/6.

//  Copyright © 2017年shihu. All rights reserved.

//

#import"Model.h"

@implementationModel

@end

================================

=======

================================

=======

谢谢!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容