iOS之FMDB

1.什么是FMDB

1>FMDB是iOS平台的SQLite数据库框架
2>FMDB以OC的方式封装了SQLite的C语言API
 
2.FMDB的优点
1>使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码
2>对比苹果自带的Core Data框架,更加轻量级和灵活
3>提供了多线程安全的数据库操作方法,有效地防止数据混乱
 
3.FMDB有三个主要的类
FMDatabase :一个FMDatabase对象就代表一个单独的SQLite数据库,用来执行SQL语句
FMResultSet :使用FMDatabase执行查询后的结果集
FMDatabaseQueue:用于在多线程中执行多个查询或更新,它是线程安全的
 
/********打开数据库************/
通过指定SQLite数据库文件路径来创建FMDatabase对象

FMDatabase *db = [FMDatabase databaseWithPath:path];

if (![db open]) {

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

}

文件路径有三种情况
具体文件路径
如果不存在会自动创建
 
空字符串@""
会在临时目录创建一个空的数据库
当FMDatabase连接关闭时,数据库文件也被删除
 
nil
会创建一个内存中临时数据库,当FMDatabase连接关闭时,数据库会被销毁
 
/**************执行更新********************/
在FMDB中,除查询以外的所有操作,都称为“更新”
create、drop、insert、update、delete等
 
/************执行查询示例*****************/
示例

// 查询数据

FMResultSet *rs = [db executeQuery:@"SELECT * FROM t_student"];

// 遍历结果集

while ([rs next]) {

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

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

    double score = [rs doubleForColumn:@"score"];

 

/**************FMDatabaseQueue*********************/
FMDatabase这个类是线程不安全的,如果在多个线程中同时使用一个FMDatabase实例,会造成数据混乱等问题
 
为了保证线程安全,FMDB提供方便快捷的FMDatabaseQueue类
 
FMDatabaseQueue的创建

FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:path];

 

/*************************个人简单代码介绍*******************/

#import "ViewController.h"
#import "FMDB.h"

@interface ViewController ()

@property (strong, nonatomic) FMDatabase *db;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // 0.获得沙盒中的数据库文件名
    NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]stringByAppendingPathComponent:@"people.sqlite"];
//    NSLog(@"%@",path);
    // 1.创建数据库实例对象
    self.db = [FMDatabase databaseWithPath:path];
    
    // 2.打开数据库
    if ([self.db open]) {
        NSLog(@"数据库打开成功");
        
        //创表
        BOOL result = [self.db executeUpdate:@"create table if not exists people(id integer primary key autoincrement, name text, age integer);"];
        if (result) {
            NSLog(@"创表成功");
        }else{
            NSLog(@"创表失败");
        }
        
    }else{
        NSLog(@"数据库打开失败");
    }

}

- (IBAction)addData {
    /*********插入单个数据********/
/*
    BOOL result = [self.db executeUpdate:@"insert into people (name, age) values('chixuedong',20)"];
    if (result) {
        NSLog(@"插入成功");
    }else{
        NSLog(@"插入失败");
    }
*/
    /**********插入多个数据**********/
    for (int i = 0; i < 20; i++) {
        NSString *names = [NSString stringWithFormat:@"chixuedong--%d",i];
        NSNumber *ages = @(i);
        BOOL result = [self.db executeUpdate:@"insert into people (name, age) values(?, ?);",names,ages];
        if (result) {
            NSLog(@"插入成功--- %d",i);
        }else{
            NSLog(@"插入失败--- %d",i);
        }
    }
    
}


- (IBAction)deleteData {
   /*********删除全部数据************/
/*  
    BOOL result = [self.db executeUpdate:@"delete from people"];
    if (result) {
        NSLog(@"删除全部数据成功");
    }else{
        NSLog(@"删除全部数据失败");
    }
*/
    /*********根据条件删除指定数据************/
    BOOL result = [self.db executeUpdate:@"delete from people where age >10;"];
    if (result) {
        NSLog(@"删除指定数据成功");
    }else{
        NSLog(@"删除指定数据失败");
    }
    
    
    
}


- (IBAction)update {
    
    BOOL result = [self.db executeUpdate:@"update people set name = ? where name = ?;",@"chixuedong",@"chixuedong--10"];
    if (result) {
        NSLog(@"更新数据成功");
    }else{
        NSLog(@"更新数据失败");
    }
    
}


- (IBAction)selectData {
    
    // 1.查询数据
    FMResultSet *result = [self.db executeQuery:@"select * from people where age > ?;",@10];
    
    // 2.遍历结果集
    while ([result next]) {
        NSInteger ID = [result intForColumn:@"id"];
        NSString *Name = [result stringForColumn:@"name"];
        NSInteger Age = [result intForColumn:@"age"];
        NSLog(@"%ld,%@,%ld",ID,Name,Age);
    }
    
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

@end

 

 

 

 

posted on 2016-04-08 16:27  学东哥哥  阅读(210)  评论(0编辑  收藏  举报