FMDB简单用法
首先引入类库
声明数据库和路径
/** 声明数据库对象 */
@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简单用法的更多相关文章
- CATransition(os开发之画面切换) 的简单用法
CATransition 的简单用法 //引进CATransition 时要添加包“QuartzCore.framework”,然后引进“#import <QuartzCore/QuartzCo ...
- FMDB简单封装和使用
工具:火狐浏览器+SQLite Manager插件 ; Xcode; FMDB库; 效果: 项目地址: https://github.com/sven713/PackFMDB 主要参考这两篇博客: 1 ...
- jquery.validate.js 表单验证简单用法
引入jquery.validate.js插件以及Jquery,在最后加上这个插件的方法名来引用.$('form').validate(); <!DOCTYPE html PUBLIC " ...
- iOS开发数据库篇—FMDB简单介绍
iOS开发数据库篇—FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来 ...
- NSCharacterSet 简单用法
NSCharacterSet 简单用法 NSCharacterSet其实是许多字符或者数字或者符号的组合,在网络处理的时候会用到 NSMutableCharacterSet *base = [NSMu ...
- [转]Valgrind简单用法
[转]Valgrind简单用法 http://www.cnblogs.com/sunyubo/archive/2010/05/05/2282170.html Valgrind的主要作者Julian S ...
- Oracle的substr函数简单用法
substr(字符串,截取开始位置,截取长度) //返回截取的字 substr('Hello World',0,1) //返回结果为 'H' *从字符串第一个字符开始截取长度为1的字符串 subst ...
- Ext.Net学习笔记19:Ext.Net FormPanel 简单用法
Ext.Net学习笔记19:Ext.Net FormPanel 简单用法 FormPanel是一个常用的控件,Ext.Net中的FormPanel控件同样具有非常丰富的功能,在接下来的笔记中我们将一起 ...
- TransactionScope简单用法
记录TransactionScope简单用法,示例如下: void Test() { using (TransactionScope scope = new TransactionScope()) { ...
随机推荐
- JAVA - IDEA快捷键(精简版)
快捷键 功能 Ctrl + Alt + V 对应eclipse ctrl + l + 2 自动补全 Ctrl + Alt + L 对应eclipse ctrl + shift + o 代码格式化 Ct ...
- C#骏鹏自动售货机接口
MachineJP类: 第1部分:串口初始化,串口数据读写 using System; using System.Collections.Generic; using System.IO.Ports; ...
- Android Volley框架的使用(4)
5. 取消请求 可以通过请求的setTag()方法给请求设置TAG,需要取消这些请求时,用请求队列的cancelAll()方法取消带有特定TAG的请求. 为请求设置TAG: stringRequest ...
- 调整 FMX Android 文字显示「锯齿」效果
说明:调整 Firemonkey Android 显示文字有「锯齿」效果 适用:Firemonkey Android 平台 修改方法: 请将源码 FMX.FontGlyphs.Android.pas ...
- Android中自定义ProgressBar
<ProgressBar android:id="@+id/more_vprogress_more" android:layo ...
- ssh架构简单解释和vo po解释
Struts.spring.Hibernate在各层的作用 1)struts 负责 web层. ActionFormBean 接收网页中表单提交的数据,然后通过Action 进行处理,再Forwa ...
- hive安装--设置mysql为远端metastore
作业任务:安装Hive,有条件的同学可考虑用mysql作为元数据库安装(有一定难度,可以获得老师极度赞赏),安装完成后做简单SQL操作测试.将安装过程和最后测试成功的界面抓图提交 . 已有的当前虚拟机 ...
- Hadoop学习笔记1-如何简单布署hadoop
企业机型配置: 选型标准:普通的,廉价的,标准的(容易替换的),工业化大规模生产的 CPU:支持多核CPU,如2个4核CPU 内存:16G以上,内存越大,常用数据都缓存在内存,提高速度 硬盘:不需RA ...
- java1.8的默认方法的坑
默认方法: 接口的方法一直都是抽象方法,自从1.8出来了之后,新增了一个默认方法.可以在接口中实现方法 1.默认方法需要用default修饰 2.默认方法不能是静态的 3.子接口继承了2个相同签名的默 ...
- 与锤子手机HR的对话——创业没有联合创始人,CTO 等高管会把它当做自己的事业吗?
以下对话,是在被之前的锤子HR磨叽2周约面试折腾的火大的心态下进行…… 这个问题发到知乎,被一群人骂啊……cnblogs都是工程师,估计懂期权参加创业的同学多一些,有空前往知乎声援一下……在这里:ht ...