使用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的简单用法的更多相关文章

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

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

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

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

  3. NSCharacterSet 简单用法

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

  4. [转]Valgrind简单用法

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

  5. Oracle的substr函数简单用法

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

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

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

  7. TransactionScope简单用法

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

  8. WPF之Treeview控件简单用法

    TreeView:表示显示在树结构中分层数据具有项目可展开和折叠的控件 TreeView 的内容是可以包含丰富内容的 TreeViewItem 控件,如 Button 和 Image 控件.TreeV ...

  9. listActivity和ExpandableListActivity的简单用法

    http://www.cnblogs.com/limingblogs/archive/2011/10/09/2204866.html 今天自己简单的总结了listActivity和Expandable ...

随机推荐

  1. Java对象嵌套

    1.基础篇 Java面向对象东西太深奥了,本文只是发表一点自己的见解. 首先 举个栗子!! 汽车, 我们先给汽车定义个轮胎类  有一个属性名 轮胎尺寸 /** *定义一个轮胎类 */ class Wh ...

  2. LPC2478中断控制器以及串口详解

    LPC2478的中断系统 LPC2478使用的是ARM PrimeCell向量中断控制器,一共支持32个中断向量,处于AHB空间便于系统快速访问,在中断向量的硬件优先级上还有一层可以用户自己设计的软件 ...

  3. Warning: Attempt to present on whose view is not in模态跳转问题

    错误分析:            controller A present controller B ,前提是A的view要存在,如果不存在,就会报这个错.   解决方法:             将 ...

  4. VS2010环境下使用VB编写串口助手

    1.在Form1的设计模式下添加以下控件: 2.添加好控件之后我们就可以打开Form1.vb进行编程了: '使用串口需要引用的命名空间 Imports System.IO.Ports Imports ...

  5. JS 弹出层 定位至屏幕居中

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. EF dbcontext上下文的处理

    ,那么我们整个项目里面上下文的实例会有很多个,我们又遇到了多次,当我们在编程的时候遇到多的时候,一般我们就要想想能不能解决多这个问题. (2)这里我要说的是EF上下文怎么管理呢?很简单啦,就是要保证线 ...

  7. 安卓弹出对话框——AlertDialog(二)

    在Android中,启动一个对话框有三种方式: 1.定义一个新的activity,并将其主题设置为对话框风格 2.使用AlertDialog类,并且显示它 3.使用 Android的Dialog类的子 ...

  8. 安装了C

    2014-04-09 13:19:30 大学里看的第一本编程书籍,就是C.但是一直没有编译. 今天首次安装,我也佩服当初我是怎么通过C二级的. 上午写了sds手册.其中的制图用的visio制图,非常好 ...

  9. UVa 10132 - File Fragmentation

    题目大意:有n个相同的文件,每个文件从中间分为两半,现在给你这2n个文件碎片,求原来完整的文件. 找出文件碎片长度的最大值和最小值,二者相加可得到原来文件的长度len.然后逐个进行拼接,将拼接后长度等 ...

  10. 使用python爬虫抓站的一些技巧总结:进阶篇

    Reference:http://python.jobbole.com/82000/ 一.gzip/deflate支持 现在的网页普遍支持gzip压缩,这往往可以解决大量传输时间,以VeryCD的主页 ...