首先引入类库

声明数据库和路径

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

@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. StreamHelper

    public static MemoryStream CreateMemoryStreamFromBytes(byte[] inputData) { if (inputData == null || ...

  2. .Net Task<T>的一种比较神奇的卡死情况(Wait/Result卡死, await能得到结果)

    出现的环境.Net4.0 + WebApi1(4.0.30506.0) + Microsoft.Bcl.Async.1.0.168 自己死活看不出原因, 分享出来给大家看看,希望有人能找到问题的关键 ...

  3. 改进网站设计的免费jQuery插件Top 7

    Animate Scroll.js是一个简单的jQuery插件,它用来为滚动增加延迟效果.同时你还可以自定义滚动样式(30多种滚动效果)和滚动速度,还有一个可以操纵”滚动结束位置”的”padding” ...

  4. Web API配置自定义路由

    默认访问Web API时,是无需指定method名.它会按照默认的路由来访问.如果你的Web API中出现有方法重载时,也许得配置自定义路由: 标记1为自定义路由,标记2为默认路由,需要把自定义路由排 ...

  5. C# 委托和事件(一):最简单的委托和事件

    C#的事件基于委托,所以先说委托. 一切脱离实际场景的抽象概念新手看上去就像是在扯犊子,不错,我就是个新手.所以我需要一个实际的场景. 明天刚好考试(商务英语),考试上有两个角色(class):老师( ...

  6. C# 模拟登陆并继续访问其他页面

    using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Net;usi ...

  7. 【java手记】------------------------java中转发和重定向区别

    转发: request.getRequestDispatcher("success.jsp").forward(request,response); 在服务器组件收到用户请求后.经 ...

  8. java 内部类 *** 最爱那水货

    注: 转载于http://blog.csdn.net/jiangxinyu/article/details/8177326 Java语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类.内部类又 ...

  9. Monkey测试4——Monkey命令行可用的全部选项

    Monkey命令行可用的全部选项 常规 --help 列出简单的用法. -v 命令行的每一个-v将增加反馈信息的级别. Level 0(缺省值)除启动提示.测试完成和最终结果之外,提供较少信息. Le ...

  10. 学习HTML5之表单

    HTML5 的标准已经定了,应该火了,或者已经火了.那么是不是可以学习一下呢? 目前h5的主场还是在手机端,pc还是受困于浏览器的兼容,主要是IE在拖后腿.所以这里侧重的是手机里面的表现. 先来看看表 ...