首先引入类库

声明数据库和路径

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

@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. es6继承 vs js原生继承(es5)

    最近在看es2015的一些语法,最实用的应该就是继承这个新特性了.比如下面的代码: $(function(){ class Father{ constructor(name, age){ this.n ...

  2. codeMirror插件使用讲解

    codeMirror是一款十分强大的代码编辑插件,提供了十分丰富的API,最近在项目中用到了这款插件,于是在这里给大家分享下使用方法和心得: codeMirror调用非常方便 首先在页面中载入插件CS ...

  3. [译]学习IPython进行交互式计算和数据可视化(一)

    --学习IPython进行交互式Python编程.高性能数字计算和数据可视化 作者:Cyrille Rossant 译者:Tacey Wong 注:仅为个人翻译及学习,多有谬处,E文尚可的推荐阅读英文 ...

  4. a configuration error occurred during startup. place verify the preference field whth the prompt:TomcatJDK name:

    错误一:安装Tomcat的时候出现了错误,这里要是找不到Tomcat6.0我们可以设置其enbale显示就可以,上面的错误解决办法: 错误二:在eclipse中启动Tomcat6.0的时候现在说800 ...

  5. TRichTextBox – A universal RichTextBox which can display animated images and more

    TRichTextBox – A universal RichTextBox which can display animated images and more trestan, 7 Dec 201 ...

  6. easyui的window插件再次封装

    easyui的window插件再次封装 说明:该插件弹出的弹出框在最顶层的页面中,而不是在当前页面所在的iframe中,它的可拖动范围是整个浏览器窗口:所以不能用JS的parent对象获取弹出它的父页 ...

  7. 实时数据显示--SignalR实例演示

    近段时间,有实现一个看板的功能,就是用户更新信息时,即是对数据库的数据进行插入,更新,或是删除时,在墙上的屏幕的数据不需要人为去刷新,用户就能看到更新后的数据. 实现此功能,Insus.NET使用Si ...

  8. Clr静态数据Table-Valued函数

    前两天Insus.NET实现一个功能<在数据库中提供只读数据>http://www.cnblogs.com/insus/p/4384411.html ,在数据库中为程序提供静态数据.它是在 ...

  9. 常用的一些SQL语句整理,也许有你想要的。

    本篇文章是对一些常用的sql语句进行了总结与分析,需要的朋友参考下,也许会有你需要的. 1.SQL行列转换 问题:假设有张学生成绩表(tb)如下:姓名 课程 分数张三 语文 74张三 数学 83张三 ...

  10. Ajax学习笔记2之使用Ajax和XML

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Using Ajax wit ...