首先引入类库

声明数据库和路径

/**  声明数据库对象  */

@property (nonatomic, strong) FMDatabase *dataBase;

/**  声明存储路径  */

@property (nonatomic, strong) NSString *filePath;

创建表:

 #pragma mark - 创建表
- (void)createTable { // 1.创建sql语句
NSString *str = @"create table if not exists t_student (id integer primary key autoincrement not null, name text not null, age integer not null, sex text not null)"; // 2.找到存储路径
NSString *document = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
self.filePath = [document stringByAppendingPathComponent:@"student.sqlite"];
NSLog(@"filePath = %@", self.filePath); // 3.初始化FMDB对象
self.dataBase = [FMDatabase databaseWithPath:self.filePath]; // 4.判断数据库打开的时候才执行语句
if ([self.dataBase open]) {
BOOL result = [self.dataBase executeUpdate:str]; if (result) {
NSLog(@"创建表成功");
} else {
NSLog(@"创建表失败");
}
} // 5.关闭数据库
[self.dataBase close];
}

添加

 #pragma mark - 以队列方式插入多个学生【这种方式较为常用】
- (IBAction)insertManyStudent:(id)sender { // FMDB不支持多个线程同时操作,所以一般以串行的方式实现相关的操作 // 1.打开数据库
[self.dataBase open]; // 2.创建操作队列
FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:self.filePath]; // 3.标识:记录是否操作成功
__block BOOL isSucced = YES; // 4.把所需要的事件打包放在操作队列中
[queue inTransaction:^(FMDatabase *db, BOOL *rollback) { // 串行队列
isSucced = [db executeUpdate:@"insert into t_student (name, age, sex) values (?, ?, ?)", @"高月", @, @"女"] && isSucced;
isSucced = [db executeUpdate:@"insert into t_student (name, age, sex) values (?, ?, ?)", @"石兰", @, @"女"] && isSucced;
isSucced = [db executeUpdate:@"insert into t_student (name, age, sex) values (?, ?, ?)", @"卫庄", @, @"男"] && isSucced; // 如果有错误,就将它返回
if (!isSucced) {
// block返回的参数rollback进行处理(bool类型的指针)
*rollback = YES;
return;
} else {
NSLog(@"插入成功");
}
}]; // 5.关闭数据库
[self.dataBase close];
}

更改

 #pragma mark - 更改学生
- (IBAction)updateAction:(id)sender { // 1.打开数据库
[self.dataBase open]; // 2.执行语句
BOOL result = [self.dataBase executeUpdate:@"update t_student set name = ? where name = ?", @"少羽", @"卫庄"];
if (result) {
NSLog(@"更改成功");
} else {
NSLog(@"%d", result);
NSLog(@"更改失败");
} // 3.关闭数据库
[self.dataBase close];
}

删除

 #pragma mark - 删除学生
- (IBAction)deleteAction:(id)sender { // 1.打开数据库
[self.dataBase open]; // 2.执行sql语句
BOOL result = [self.dataBase executeUpdate:@"delete from t_student where name = ?", @"少羽"];
if (result) {
NSLog(@"删除成功");
} else {
NSLog(@"删除失败");
} // 3.关闭数据库
[self.dataBase close];
}

查询所有

 // 查询所有
- (NSMutableArray *)searchAll { [self.dataBase open];
FMResultSet *resultSet = [self.dataBase executeQuery:@"select *from p_person"];
NSMutableArray *array = [NSMutableArray array];
while ([resultSet next]) {
Person *person = [[Person alloc] init];
person.id = [resultSet intForColumn:@"id"];
person.name = [resultSet objectForColumnName:@"name"];
person.age = [resultSet intForColumn:@"age"];
person.weight = [resultSet doubleForColumn:@"weight"]; [array addObject:person];
}
[self.dataBase close];
return array;
}

FMDB简单用法的更多相关文章

  1. CATransition(os开发之画面切换) 的简单用法

    CATransition 的简单用法 //引进CATransition 时要添加包“QuartzCore.framework”,然后引进“#import <QuartzCore/QuartzCo ...

  2. FMDB简单封装和使用

    工具:火狐浏览器+SQLite Manager插件 ; Xcode; FMDB库; 效果: 项目地址: https://github.com/sven713/PackFMDB 主要参考这两篇博客: 1 ...

  3. jquery.validate.js 表单验证简单用法

    引入jquery.validate.js插件以及Jquery,在最后加上这个插件的方法名来引用.$('form').validate(); <!DOCTYPE html PUBLIC " ...

  4. iOS开发数据库篇—FMDB简单介绍

    iOS开发数据库篇—FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来 ...

  5. NSCharacterSet 简单用法

    NSCharacterSet 简单用法 NSCharacterSet其实是许多字符或者数字或者符号的组合,在网络处理的时候会用到 NSMutableCharacterSet *base = [NSMu ...

  6. [转]Valgrind简单用法

    [转]Valgrind简单用法 http://www.cnblogs.com/sunyubo/archive/2010/05/05/2282170.html Valgrind的主要作者Julian S ...

  7. Oracle的substr函数简单用法

    substr(字符串,截取开始位置,截取长度) //返回截取的字 substr('Hello World',0,1) //返回结果为 'H'  *从字符串第一个字符开始截取长度为1的字符串 subst ...

  8. Ext.Net学习笔记19:Ext.Net FormPanel 简单用法

    Ext.Net学习笔记19:Ext.Net FormPanel 简单用法 FormPanel是一个常用的控件,Ext.Net中的FormPanel控件同样具有非常丰富的功能,在接下来的笔记中我们将一起 ...

  9. TransactionScope简单用法

    记录TransactionScope简单用法,示例如下: void Test() { using (TransactionScope scope = new TransactionScope()) { ...

随机推荐

  1. JS魔法堂:IMG元素加载行为详解

    一.前言 在<JS魔法堂:jsDeferred源码剖析>中我们了解到img元素加载失败可以作为函数异步执行的优化方案,本文打算对img元素的加载行为进行更深入的探讨. 二.资源加载的相关属 ...

  2. 关于MySql中的varchar类型

    今天新开始的项目在做数据库设计,发现自己对MySql的varchar类型还不熟悉,故又上网收集资料整理如下. 1.varchar类型的变化 MySQL 数据库的varchar类型在4.1以下的版本中的 ...

  3. C#写快速排序

    //先上快排代码------------------------------------------------------------------------public static void Q ...

  4. python sqlite中通过字段名获取查询结果

    在连sqlite数据库时,用fetchall()查询结果,是用row[0],row[1]这样的方式来打印每列的结果 但是我想用row[“字段名”]方式查询怎么办? import sqlite3 con ...

  5. 一个故事讲清楚NIO

    转载请引用:一个故事讲清楚NIO 假设某银行只有10个职员.该银行的业务流程分为以下4个步骤: 1) 顾客填申请表(5分钟): 2) 职员审核(1分钟): 3) 职员叫保安去金库取钱(3分钟): 4) ...

  6. 孙鑫MFC学习笔记6:菜单编程

    1.对菜单响应的顺序: 视类,文档类,框架类,应用程序类 2.消息的分类 3.CWnd继承自CCmdTarget类, 所以从CWnd派生出的类也可以接收WM_COMMAND消息 4.命令的消息路由 5 ...

  7. Firemonkey TComboBox 下拉菜单字型修改方法 (D10)

    在 FMX 下的 TComboBox 下拉菜单字型修改有二种方法: uses FMX.Pickers; 使用 Style,需先设定好 Style 后,再指定预设项的 Style,方法如下: proce ...

  8. Yii2框架打包成Phar包报错的经历

    以yii2为例 打包文件过程比较简单,但打包好以后简单测试yii命令,一直报错: PHP Fatal error: Uncaught yii\base\InvalidParamException: T ...

  9. 通过HttpWebRequest请求https接口

    一.为什么进行代理接口的开发: 有些项目需要访问被墙了哒网站,比如前不久公司开发项目需要使用google地图的接口,而google在中国被墙了,所有打算做一个代理接口服务,将代理放到国外服务器上,通过 ...

  10. 完善ext.grid.panel中的查询功能(紧接上一篇)

    今天的代码主要是实现,Ext.grid.panel中的查询,其实我也是一名extjs新手,开始想的实现方式是另外再创建一个新的grid类来存放查询出的数据(就是有几个分类查询就创建几个grid类),这 ...