iOS中FMDB简介

1什么是FMDB

 1.   iOS中原生的SQLite API在使用上相当不好用,在使用时,非常不便。于是,就出现了一系列将SQLite API进行封装的代码库,例如FMDB、   

PlausibleDatabaseSQLitePersistentObjects

FMDBiOS平台的SQLite数据库框架

FMDBOC的方式封装了SQLiteC语言API

 

2.FMDB的优点

使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码

对比苹果自带的Core Data框架,更加轻量级和灵活

提供了多线程安全的数据库操作方法,有效地防止数据混乱

2FMDB下载地址:FMDB (https://github.com/ccgus/fmdb







3 FMDB常用类

FMDB有三个主要的类

1FMDatabase

一个FMDatabase对象就代表一个单独的SQLite数据库

用来执行SQL语句

 

2FMResultSet

使用FMDatabase执行查询后的结果集

 

3FMDatabaseQueue

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

4FMDB使用:github上下载过代码后,工程中必须导入srcfmdb文件夹;

      FMDB内部代码实现:实际上用的还是系统的SQLite3 API 




查看FMDB这个库里面的源码,发现调用的是系统的SQLite3 API


编译之后,会报很多错误

ld: symbol(s) not found for architecture i386

解决:导入系统库 libsqlite3.0.dylib



导入第三方库 FMDB.h

a、创建数据库根据文件路径、创建数据库 根据路径

b、打开数据库如果数据库存在 就直接打开如果不存在 先创建数据库然后再打开

c、设置缓存提高执行效率

d、判断数据库中是否存在表创建表 数据库的增、删、改操作都用executeUpdate





打开数据库,设置缓存

- (void)openDatabase
{
    //1.打开数据库
    if (![_database open]) {
        //关闭数据库
        [_database close];
        NSAssert(NO, @"数据库打开失败");
    }
    
    //2.设置缓存,为了提高执行效率
    [_database setShouldCacheStatements:YES];

}



创建表DDL

- (void)createTable
{
    [self openDatabase];
    
    //3.执行创建表的sql语句:判断数据库中是否存在此表
    //ContactTable
    if (![_database tableExists:@"ContactTable"]) {
        //表的创建、添加、删除、更新:执行sql语句的方法相同:executeUpdate:
        BOOL isOk = [_database executeUpdate:@"CREATE TABLE ContactTable (name TEXT,phone TEXT)"];
        if (isOk) {
            NSLog(@"表创建成功");
        }else{
            NSLog(@"表创建失败");
        }
    }
    //关闭数据库
    [_database close];
}




1、查

打开数据库 ,设置缓存,执行查询语句, 返回一个结果集executeQuery, while循环逐步取出结果集中的数据,取出不同的数据赋值给对象的属性, 然后放入数组  , 关闭结果集

- (IBAction)queryData:(id)sender
{
    
    NSMutableArray* mArray = [NSMutableArray array];
    
    //打开数据库并设置缓存
    [self openDatabase];
    //查询:DQL:  executeQuery:
    
    //设置查询结果集
    FMResultSet* resultSet = [_database executeQuery:@"SELECT * FROM ContactTable"];

    //next 逐步取出结果集中的数据,返回YES:表示还有下一条数据,并且会切换到下一条数据,NO:没有下一条数据,停止查询
    while ([resultSet next]) {
        //结果集中取值:两种:(1)根据字段名取值(2)根据字段索引取值
        NSString* nameStr = [resultSet stringForColumn:@"name"];
        NSString* phoneStr = [resultSet stringForColumn:@"phone"];
        
        //封装成对象 装在数组中:
        [mArray addObject:nameStr];
        [mArray addObject:phoneStr];
    }
    
    //取出数据
    for (id object in mArray) {
        NSLog(@"-----%@",object);
    }
    
    [_database close];
}



2、增

打开数据库设置缓存 执行插入语句关闭数据库 

- (IBAction)insertData:(id)sender
{
    //1.打开数据库,并设置缓存
    [self openDatabase];
    
    NSString* name = @"zhangsan";
    NSString* phone = @"12345678";
    
    //2.执行sql
    BOOL isInsert = [_database executeUpdate:@"INSERT INTO ContactTable VALUES(?,?)",name,phone];
    if (isInsert) {
        NSLog(@"插入数据成功");
    }else{
        NSLog(@"插入数据失败");
    }
    
    //关闭数据库
    [_database close];
    
}




3、删

打开数据库设置缓存 执行删除语句关闭数据库 

- (IBAction)deleteData:(id)sender
{
    //1.打开数据库
    [self openDatabase];
    
    BOOL isDelete = [_database executeUpdate:@"DELETE FROM ContactTable WHERE name = 'zhangsan'"];
    if (isDelete) {
        NSLog(@"删除成功");
    }else{
        NSLog(@"删除失败");
    }
    
    [_database close];
}


参考博客:http://www.cnblogs.com/wendingding/p/3871848.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值