iOS 数据库第三方FMDB的简单使用

一 FMDB的简单说明及介绍

FMDB的github地址 https://github.com/ccgus/fmdb

FMDB是一款简洁的,易用的封装库,简单介绍一下FMDB的使用

在FMDB下载文件后,工程中必须导入如下文件,并使用libsqlite3.0.tbd依赖包

FMDB同时兼容ARC和非ARC工程,会自动根据工程配置来调整相关的内存管理代码.

二.FMDB的核心类

FMDB有三个主要的类

(1)FMDatabase

     一个FMDatabase对象就代表一个单独的SQLite数据库,用来执行SQL语句

 

(2)FMResultSet

    使用FMDatabase执行查询后的结果集(即所查询结果的集合)

 

(3)FMDatabaseQueue

    用于多线程中执行多个查询或更新,它是线程安全的

 

三.打开数据库

通过指定的SQLite数据库文件路径创建FMDatabase对象

path 为所创建数据库的路径

FMDatabase *db = [FMDatabase databaseWithPath:path];

if (![db open]){

NSLog(@"数据库打开失败");

}

文件路径有三种情况

(1)具体文件路径

如果不存在会自动创建

(2)空字符串@""

会在临时目录创建一个空得数据库

当FMDatabase连接关闭时,数据库文件也会被删除

(3)nil

会创建一个内存中林女士数据库,当FMDatabase连接关闭时,数据库会被销毁

 

四 执行更新

在FMDB中,除查询以外的所有操作都称为更新

create、drop、insert、update、delete等

 

使用executeUpdate:方法执行更新

示例

[db executeUpdate:@"UPDATE t_student SET age = ? WHERE name = ?;", @20, @"Jack"]

 

五.执行查询

查询方法

- (FMResultSet *)executeQuery:(NSString*)sql, ...

- (FMResultSet *)executeQueryWithFormat:(NSString*)format, ...

- (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments

 

示例代码

//

//  ViewController.m

//  数据库

 

//  Copyright © 2016 zm. All rights reserved.

//

 

#import "ViewController.h"

#import "FMDB.h"

@interface ViewController ()

@property (nonatomic,strong)FMDatabase *db;

 

@end

 

@implementation ViewController

 

- (void)viewDidLoad {

    [super viewDidLoad];

  //1. 获取数据库文件的路径

    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

    

    NSString *fileName= [doc stringByAppendingPathComponent:@"student.sqlite"];

    

    //2.获取数据库

    FMDatabase *db = [FMDatabase databaseWithPath:fileName];

    

    //3.打开数据库

    if ([db open]) {

        //创表

        BOOL result = [db executeUpdate:@"create table if not exists t_student (id integer primary key autoincrement,name text not null,age integer not null);"];

        if (result) {

            NSLog(@"创建表成功");

        }else{

            

            NSLog(@"创建表失败");

        }

    }

    

    self.db = db;

 

}

 

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

    

    [self delete];

    [self insert];

    [self query];

    

    

}

//删除数据

 

- (void)delete{

    

    [self.db executeUpdate:@"drop table if exests t_student;"];

    [self.db executeUpdate:@"create table if not exists t_student (id integer primary key autoincrement,name text not null, age integer not null);"];

    

    

    

}

 

//插入数据

- (void)insert{

    

    for (int i = 0; i < 10; i++) {

        NSString *name = [NSString stringWithFormat:@"jack-%d",arc4random_uniform(40)];

        

        [self.db executeUpdate:@"insert into t_student (name,age) values (?,?);",name,@(arc4random_uniform(40))];

 

        

    }

  

}

 

//查询

 

-(void)query{

    //1.执行查询语句

    FMResultSet *resultSet = [self.db executeQuery:@"select * from t_student"];

    //2遍历结果

    while ([resultSet next]) {

        int ID = [resultSet intForColumn:@"id"];

        NSString *name = [resultSet stringForColumn:@"name"];

        int age = [resultSet intForColumn:@"age"];

        NSLog(@"%d %@ %d",ID,name,age);

    }

    

    

    

}

 

@end

 

posted @ 2016-01-29 16:00  听风观雨阁  阅读(180)  评论(0编辑  收藏  举报