FMDB的简单用法
使用cocoaPods将FMDB下载到工程
第一步:引入框架,引入支持类库(libsqlite3.0.tbd)
#import <FMDB.h>

声明属性
@interface ViewController () /// 声明数据库对象 @property (nonatomic, strong) FMDatabase *dataBase; /// 声明存储路径 @property (nonatomic, strong) NSString *filePath; @end
#pragma mark - 创建表
- (void)viewDidLoad {
[super viewDidLoad];
// 创建表
[self createTable];
}
#pragma mark - 创建表
- (void)createTable
{
// 第一步:创建sql语句
NSString *createSql = @"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)";
// 第二步:找到存储路径
NSString *document = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:];
self.filePath = [document stringByAppendingPathComponent:@"student.sqlite"];
NSLog(@"%@", self.filePath);
// 第三步:使用路径初始化FMDB对象
self.dataBase = [FMDatabase databaseWithPath:self.filePath];
// 第四步:数据库执行相关的操作
// 需要判断数据库打开的时候才进行执行语句
if ([self.dataBase open]) {
BOOL result = [self.dataBase executeUpdate:createSql];
if (result) {
NSLog(@"建表成功");
} else {
NSLog(@"建表失败");
}
}
// 第五步:关闭数据库
[self.dataBase close];
}
#pragma mark - 添加学生
- (IBAction)insertIntoActon:(id)sender {
// 打开数据库
[self.dataBase open];
// 第二步:进行相关操作
NSArray *nameArray = [NSArray arrayWithObjects:@"MBBoy", @"炸天", @"小明", nil];
; i < nameArray.count; i ++) {
NSString *name = [nameArray objectAtIndex:i];
// 插入语句
NSString *insertSql = @"insert into t_student(name, age, sex) values (?, ?, ?)";
BOOL result = [self.dataBase executeUpdate:insertSql, name, @, @"男"];
if (result) {
NSLog(@"插入成功");
} else {
NSLog(@"插入失败");
NSLog(@"%d", result);
}
}
// 第五步:关闭数据库
[self.dataBase close];
}
#pragma mark - 更改学生
- (IBAction)upDateAction:(id)sender {
// 打开数据库
[self.dataBase open];
BOOL result = [self.dataBase executeUpdate:@"update t_student set name = ? where name = ?", @"孟玲旭", @"MBBoy"];
if (result) {
NSLog(@"更改成功");
} else {
NSLog(@"更改失败");
}
[self.dataBase close];
}
#pragma mark - 删除学生
- (IBAction)deleteAction:(id)sender {
// 打开数据库
[self.dataBase open];
BOOL result = [self.dataBase executeUpdate:@"delete from t_student where name = ?", @"孟玲旭"];
if (result) {
NSLog(@"删除成功");
} else {
NSLog(@"删除失败");
}
}
#pragma mark - 查询学生
- (IBAction)searchAction:(id)sender {
// 打开数据库
[self.dataBase open];
// 查询结果使用的类FMResultSet
FMResultSet *resultSet = [self.dataBase executeQuery:@"select * from t_student"];
// 遍历除需要的所有内容
while ([resultSet next]) {
NSString *name = [resultSet objectForColumnName:@"name"];
NSInteger age = [resultSet intForColumn:@"age"];
NSString *sex = [resultSet objectForColumnName:@"sex"];
NSLog(@"name = %@, age = %ld, sex = %@", name, age, sex);
}
[self.dataBase close];
}
#pragma mark - 插入很多学生
- (IBAction)insertManyStudent:(id)sender {
// 已队列的形式添加数据是FMDB比较常用的添加方式
// FMDB不支持多个线程同时操作, 所以一般以串行的实现方式实现相关操作。
// 打开数据库
[self.dataBase open];
// 第一步:创建操作对类
FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:self.filePath];
// 标识:记录是否成功
__block BOOL isSuccess = YES;
// 第二步:把所需要的事件打包放在操作队列中
[queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
// 串行队列
isSuccess = [db executeUpdate:, @"男"] && isSuccess;
isSuccess = [db executeUpdate:, @"女"] && isSuccess;
isSuccess = [db executeUpdate:, @"女"] && isSuccess;
// 如果有错误
if (!isSuccess) {
// block返回的参数rollback进行处理(bool 类型的指针)
*rollback = YES;
return ;
}
}];
[self.dataBase close];
}
FMDB的简单用法的更多相关文章
- CATransition(os开发之画面切换) 的简单用法
CATransition 的简单用法 //引进CATransition 时要添加包“QuartzCore.framework”,然后引进“#import <QuartzCore/QuartzCo ...
- jquery.validate.js 表单验证简单用法
引入jquery.validate.js插件以及Jquery,在最后加上这个插件的方法名来引用.$('form').validate(); <!DOCTYPE html PUBLIC " ...
- 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()) { ...
- WPF之Treeview控件简单用法
TreeView:表示显示在树结构中分层数据具有项目可展开和折叠的控件 TreeView 的内容是可以包含丰富内容的 TreeViewItem 控件,如 Button 和 Image 控件.TreeV ...
- listActivity和ExpandableListActivity的简单用法
http://www.cnblogs.com/limingblogs/archive/2011/10/09/2204866.html 今天自己简单的总结了listActivity和Expandable ...
随机推荐
- Apache和PHP的优化
调优 Apache Apache 是一种高度可配置的软件.它具有大量特性,但每一种都代价高昂.从某种程度上来说,调优 Apache 来说就是以恰当的方式分配资源,还涉及到将配置简化为仅包含必要内容. ...
- (简单) POJ 1321 棋盘问题,回溯。
Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子 ...
- [iOS Animation]-CALayer 性能优化
性能优化 代码应该运行的尽量快,而不是更快 - 理查德 在第一和第二部分,我们了解了Core Animation提供的关于绘制和动画的一些特性.Core Animation功能和性能都非常强大,但如果 ...
- net stop 出现1060错误
net stop时出现1060错误,答案: 原来,net stop后面不能想当然地加上服务,而要在‘服务’里看看,那个服务究竟叫什么名字. 比如,我的mysql安装时不叫mysql,而是mysql5 ...
- python mysql 2014 Commands out of sync; you can't run this command now
这个问题出现再 mysql和c 的api. 简单的解决方法是不使用api直接把整个连接和命令传过去. 例如,cmd = 'mysql -h 192.168.32.210 -P 3316 -u bfd ...
- KERMIT,XMODEM,YMODEM,ZMODEM传输协议小结(转)
源:KERMIT,XMODEM,YMODEM,ZMODEM传输协议小结 Kermit协议 报文格式: 1.MARK,起始标记START_CHAR,为 0x01(CTRIL-A): 2.LEN,报文剩余 ...
- S3C2440的RTC解析
位二-十进制交换码(BCD)值数据给CPU.这些数据包括年.月.日.星期.时.分和秒的时间信息.RTC单元工作在外部32.768kHz晶振并且可以执行闹钟功能 实时时钟模块保存的数据是DCD码形式. ...
- bzoj-4318 OSU! 【数学期望】
Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1 ...
- java实现——004替换空格
1.创建新的字符串 public class T004 { public static void main(String[] args){ System.out.println(replaceBlan ...
- .Net普通三层 到 工厂模式->线程内唯一+单元工作模式->WebService分布式三层
在软件世界分层的思想无处不在 主要是为了提高软件系统的维护性,扩展性,复用性和解耦等 软件的三层构架是一种最基本的分层思想的体现 结构图大体如下: 如此一来,开发人员可以只关注其中一层,而无需关心下一 ...