一.首先创建模型类

User.h

#import <Foundation/Foundation.h>

@interface User : NSObject

@property(nonatomic,assign)NSInteger ids;

@property(nonatomic,strong)NSString *name;

@property(nonatomic,strong)NSString *classes;

@property(nonatomic,strong)NSString *grade;

@end

二.创建数据库的单例类 FMDBData

FMDBData.h

@interface FMDBData : NSObject

//单例类

+(instancetype)sharedFMDBData;

//增加数据自定义方法

-(BOOL)insertUser:(User *)user;

//删除数据自定义方法

-(BOOL)deleteUser:(User *)user;

//修改数据自定义方法

-(BOOL)updateUser:(User *)user;

//查询数据自定义方法

-(NSMutableArray *)getAll;

//查询单个数据

-(User *)getMessage:(NSString *)name;

@end

FMDBData.m

导入FMDB头文件

#import "FMDatabase.h"

//全局静态变量

//数据库

static FMDatabase *fmdb;

//对象

static FMDBData *DBdata;

@implementation FMDBData

//创建单例类的方法 - dispatch_once   只执行一次

+(instancetype)sharedFMDBData

{

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

DBdata = [[FMDBData alloc]init];

[DBdata initDB];

});

return DBdata;

}

+(instancetype)allocWithZone:(struct _NSZone *)zone

{

if (!DBdata) {

DBdata = [super allocWithZone:zone];

}

return DBdata;

}

-(id)copy

{

return self;

}

-(id)mutableCopy

{

return self;

}

-(void)initDB

{

//沙盒路径

NSString *doucmentPach = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];

//拼接路径

NSString *pach = [doucmentPach stringByAppendingString:@"user.sqlite"];

//根据路径创建数据库

fmdb = [[FMDatabase alloc]initWithPath:pach];

if ([fmdb open]) {

//创建数据表

[fmdb executeUpdate:@"create table user(ids integer primary key autoincrement, name text, classes text, grade text)"];

NSLog(@"创建成功");

[fmdb close];

}

else

{

NSLog(@"创建失败");

}

}

//实现增加数据自定义方法

-(BOOL)insertUser:(User *)user

{

[fmdb open];

NSLog(@"%@",user.name);

BOOL isb = [fmdb executeUpdate:@"insert into user values (null,?,?,?)",user.name,user.classes,user.grade];

if (isb) {

NSLog(@"插入成功");

}

else

{

NSLog(@"插入失败");

}

[fmdb close];

return isb;

}

//实现删除数据自定义方法

-(BOOL)deleteUser:(User *)user

{

[fmdb open];

NSLog(@"%@",user.name);

BOOL isb = [fmdb executeUpdate:@"delete from user where name = ?",user.name];

if (isb) {

NSLog(@"删除成功");

}

else

{

NSLog(@"删除失败");

}

[fmdb close];

return isb;

}

//实现修改自定义方法

-(BOOL)updateUser:(User *)user

{

[fmdb open];

NSLog(@"%@",user.name);

NSString *str = [NSString stringWithFormat:@"update user set name = '%@' , classes = '%@' , grade = '%@' where ids = %ld",user.name,user.classes,user.grade,user.ids];

BOOL isb = [fmdb executeUpdate:str];

if (isb) {

NSLog(@"修改成功");

}

else

{

NSLog(@"修改失败");

}

[fmdb close];

return isb;

}

//查询所有

-(NSMutableArray *)getAll

{

//打开数据库

[fmdb open];

//创建可变数组

NSMutableArray *arr = [NSMutableArray array];

//创建结果对象接受数据库的操作结果

FMResultSet *fmset = [fmdb executeQuery:@"select * from user"];

//通过循环

while ([fmset next])

{

User *user = [[User alloc] init];

//用模型类对象接受数据库内容

user.ids = [fmset intForColumn:@"ids"];

user.name = [fmset stringForColumn:@"name"];

user.classes = [fmset stringForColumn:@"classes"];

user.grade = [fmset stringForColumn:@"grade"];

NSLog(@"%@",user.classes);

//将内容加入数组

[arr addObject:user];

}

//关闭数据库

[fmdb close];

return arr;

}

//查询单个数据

-(User *)getMessage:(NSString *)name

{

[fmdb open];

User *user = [[User alloc] init];

FMResultSet *fmset = [fmdb executeQuery:@"select * from user where name = ?",name];

while ([fmset next])

{

user.ids = [fmset intForColumn:@"ids"];

user.name = [fmset stringForColumn:@"name"];

user.classes = [fmset stringForColumn:@"classes"];

user.grade = [fmset stringForColumn:@"grade"];

}

[fmdb close];

return user;

}

@end

三.单例类的使用

1.删除按钮

- (IBAction)DeleteBtn:(id)sender {

//初始化FMDB

FMDBData *handle = [FMDBData sharedFMDBData];

//初始化单例类

User *user = [[User alloc] init];

//为 单例类的name赋值

user.name = self.NameTF.text;

//执行删除事件

BOOL isb =  [handle deleteUser:user];

// [table reloadData];

if (isb) {

[[[UIAlertView alloc] initWithTitle:@"提示" message:@"删除成功" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil] show];

}else{

[[[UIAlertView alloc] initWithTitle:@"提示" message:@"删除失败" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil] show];

}

[table reloadData];

}

2.查询按钮

- (IBAction)SelectBtn:(id)sender {

FMDBData *handle = [FMDBData sharedFMDBData];

if ([self.NameTF.text isEqualToString:@""]) {

arr = [handle getAll];

}

else

{

User *user=[handle getMessage:self.NameTF.text];

arr=[[NSMutableArray alloc]initWithObjects:user,nil];

}

[table reloadData];

}

3.添加按钮

-(void)click

{

//数据库

FMDBData *handle = [FMDBData sharedFMDBData];

//单例类

User *user = [[User alloc] init];

//保存数据

user.name = self.tfname.text;

user.classes = self.tfclass.text;

user.grade = self.tfscore.text;

//执行数据添加方法

BOOL isb =  [handle insertUser:user];

if (isb)

{

//

[self dismissViewControllerAnimated:YES completion:nil];

}

else

{

[[[UIAlertView alloc] initWithTitle:@"提示" message:@"保存失败" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil] show];

}

}

4更新按钮 (传参为数据模型体)

-(void)click

{

FMDBData *hander=[FMDBData sharedFMDBData];

self.user.name = self.tfname.text;

self.user.classes = self.tfclass.text;

self.user.grade = self.tfscore .text;

NSLog(@"id:%ld",self.user.ids);

BOOL isb =  [hander updateUser:self.user];

if (isb) {

[self dismissViewControllerAnimated:YES completion:nil];

}else{

[[[UIAlertView alloc] initWithTitle:@"提示" message:@"修改失败" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil] show];

}

}

FMDB实用攻略的更多相关文章

  1. git实用攻略(二)

    最近团队的版本控制从svn切换到了git,虽说已经使用git有2年多了,也写了一个实用攻略,但是github上的项目使用经验和公司内部团队协作的使用经验还有很多不同.补充下新的使用体会. 首先还是看一 ...

  2. git实用攻略

    Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. 下面是实用教程,免基础. 一.安装git https://git-scm.com/downloads 二.git创建 ...

  3. 教你MySQL Binlog实用攻略

    本文由云+社区发表 1.概述 binlog是Mysql sever层维护的一种二进制日志,与innodb引擎中的redo/undo log是完全不同的日志:其主要是用来记录对mysql数据更新或潜在发 ...

  4. 安卓APP动态调试-IDA实用攻略

    0x00 前言 随着智能手机的普及,移动APP已经贯穿到人们生活的各个领域.越来越多的人甚至已经对这些APP应用产生了依赖,包括手机QQ.游戏.导航地图.微博.微信.手机支付等等,尤其2015年春节期 ...

  5. 安卓APP动态调试(IDA实用攻略)

    转自:http://drops.wooyun.org/mobile/5942 0x00 前言 随着智能手机的普及,移动APP已经贯穿到人们生活的各个领域.越来越多的人甚至已经对这些APP应用产生了依赖 ...

  6. 面向Web应用的并发压力测试工具——Locust实用攻略

    1. 概述 该方案写作目的在于描述一个基于Locust实现的压力测试,文中详细地描述了如何利用locustfile.py文件定义期望达成的测试用例,并利用Locust对目标站点进行并发压力测试. 特别 ...

  7. [经验] Win7减肥攻略(删文件不删功能、简化优化系统不简优化性能)

    [经验] Win7减肥攻略(删文件不删功能.简化优化系统不简优化性能) ☆心梦无痕☆ 发表于 2014-1-24 11:15:04 https://www.itsk.com/thread-316471 ...

  8. IIS 7完全攻略之日志记录配置(摘自网络)

    IIS 7完全攻略之日志记录配置 作者:泉之源 [IT168 专稿]除了 Windows 提供的日志记录功能外,IIS 7.0 还可以提供其他日志记录功能.例如,可以选择日志文件格式并指定要记录的请求 ...

  9. 30天,O2O速成攻略【8.15济南站】

    活动概况 时间:2015年08月15日13:30-16:30 地点:山东大学凤岐茶社(山东大学中心校区北门18号楼东连廊一层) 主办:APICloud.蚁巡 网址:www.apicloud.com 费 ...

随机推荐

  1. HDU 1536 & 1944

    http://acm.hdu.edu.cn/showproblem.php?pid=1536 http://acm.hdu.edu.cn/showproblem.php?pid=1944 一样的题 题 ...

  2. Android FM 模块学习之四 源码解析(1)

    Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4 前一章我们了解了FM手动调频,接下 ...

  3. SEL方法选择器

    在Objective-C中,选择器(selector)有两个意思. 一是指在代码中的方法的名称.二是指在编译是用于替换方法名称的唯一的标识符.编译后的选择器的为SEL类型.所有名称相同的方法拥有同一个 ...

  4. php Session存储到Redis的方法

    当然要写先安装php的扩展,可参考这篇文章:Redis及PHP扩展安装 修改php.ini的设置 复制代码 代码如下: session.save_handler = redis session.sav ...

  5. linux 给文件夹权限

    用的thinkphp3.2的框架,在本地运行没有问题,部署到服务器上(基于centos的LAMP环境)即报错_STORAGE_WRITE_ERROR_:./Application/Runtime/Ca ...

  6. pclint vc6/linux 工程,测试正常

    下载:http://www.gimpel.compojie版搜索一下很好找 里面有vc6 和linux工程的lnt文件,实际使用可能要修改. http://files.cnblogs.com/file ...

  7. javascript createElement ttf

    var icon= document.createElement("a");icon.className="iconfont";icon.innerHTML=& ...

  8. angular+bootstrap+MVC 之三,分页控件初级版

    今天实现一个分页控件,效果如下: 1.HTML: <!doctype html> <!--suppress ALL --> <html ng-app="appT ...

  9. Spring Framework----定时任务的执行和调度

    1. 简介 spring framework 为任务的异步执行和调度提供了抽象接口分别是:TaskExecutor 和 TaskScheduler,spring 对这些接口的进一步实现支持线程池或者将 ...

  10. 【freemaker】之获取xml的值

    测试代码 @Test public void test09() throws Exception{ root.put("doc", NodeModel.parse(new Inpu ...