zoukankan      html  css  js  c++  java
  • 数据库使用之第三方库 FMDB

    下载 FMDB

    1. 引进 sqlite3 工具箱,在要进行数据库操作的类里引进头文件 : 因为第三方软件同样是使用  sqlite 工具箱来操作数据库的,只不过是简化了操作,让语法更接近 OC 的语法, 而不需要使用过多的 C 语法;

    #import <sqlite3.h>

    2. 将第三方库加载进工程:方法是直接将 FMDB 的源文件拖拽进工程即可;

    3. 使用第三方库访问数据库

    当然了,对于高手而言,对第三方库进行了解后,上手是很快的,对于小白,只能一步一步走啦。

    3.1 指定数据库的存储路径,一般都是在沙盒根目录下地 Documents 文件夹下,文件的后缀名是 .sqlite:如  db_students.sqlite;

     NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/db_student.sqlite"]; 

    3.2 先创建一个 FMDatabase 的对象 *_db;

     FMDatabase *_db; 

    使用前要先初始化

     _db = [[FMDatabase alloc] initWithPath:filePath]; 

    看它的初始化方法:在初始化方法里没有做什么多余的操作,除了指定数据库存储的路径外,没有其他操作,0x00 是一个十六进制的地址,代表 nil(或者说 NULL )

    创建并打开数据库:

    [_db open];

    这句代码的作用有两个:

    1)若数据库不存在,则创建并打开;

    2)若数据库已经存在,则打开数据库;

    也许你还记得:sqlite3_open(path, &_db);

    这两句代码的作用是一样的,只不过前者更接近 OC 的语法,其实质还是通过后者操作数据库的。

    3.3 创建表

    if (![_db tableExists:@"tb_students"])
    {
         [_db executeUpdate:@"create table tb_students (ID integer primary key not null unique, name text, age integer)"];
    } // 先调用方法,判断表是否已经存在,若不存在则创建表

    整个过程则为:

    NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/db_student.sqlite"];
    _db = [[FMDatabase alloc] initWithPath:filePath];
    if ([_db open])
    {
       if (![_db tableExists:@"tb_students"])
       {
           [_db executeUpdate:@"create table tb_students (ID integer primary key not null unique, name text, age integer)"];
        }
    }
    [_db close]; // 当对数据库的操作结束后不要忘记关闭数据库

    3.4 插入、删除、更新、查询表的操作

    第一步:打开数据库  

    第二部:数据库操作

    第三部:关闭数据库

    需要注意的是,在进行对表的插入、删除、更新时,调用的方法是 - (BOOL)executeUpdate:(NSString*)sql, ...; 

    看示例:

    - (void)insertTable:(ZYStudent *)stu
    {
        if ([_db open])
        {
            [_db executeUpdate:@"insert into tb_students (name, age) values (?, ?)", stu.name, [NSNumber numberWithInt:stu.age]];
        } // 这里需要注意的是:替换 sql 语句里的 ?,不能直接使用基本类型的数据,而是需要将基本类型转换为 对象类型,符合 OC 的语法
        
        [_db close];
    }

    对表进行查询时,调用的方法是: - (FMResultSet *)executeQuery:(NSString*)sql, ...; 

    原因大概也都知道:插入、删除、更新操作时,主要表现出来的变化是数据表,受影响的时表中的行(即一条或几条记录),而查询操作不同,进行查询操作的目的就是要获得表中的数据,那么就应该将获得数据存储,这样就新引用了一个概念:结果集(ResultSet)。

    在查询操作里:可以简单的将理解为结果集是用来接收查询数据的,然后就可以将数据从结果集取出来,通过一定手段展示出来。

    - (void)selectTable
    {
        NSMutableArray *array = [NSMutableArray array];
        if ([_db open])
        {
            FMResultSet *rs = [_db executeQuery:@"select * from tb_students"];
            while ([rs next])
            {
                ZYStudent *stu = [[[ZYStudent alloc] init] autorelease];
                stu.ID = [rs intForColumnIndex:0];
                stu.name = [rs stringForColumnIndex:1];
                stu.age = [rs intForColumnIndex:2];
                [array addObject:stu];
            }
        }
        [_db close];
        NSLog(@"________%@", array);
    }
  • 相关阅读:
    luogu P1630 求和(枚举暴力)
    luogu P3414 SAC#1
    luogu P1869 愚蠢的组合数(质因数+瞎搞)
    luogu P1586 四方定理(背包)
    luogu P3795 钟氏映射(递推)
    2017.8.15 [Haoi2016]字符合并 区间dp+状压dp
    [NOI2002] 荒岛野人 扩展欧几里得算法
    [Noi2002]Savage 扩展欧几里得
    bzoj 1778: [Usaco2010 Hol]Dotp 驱逐猪猡
    bzoj 3505: [Cqoi2014]数三角形
  • 原文地址:https://www.cnblogs.com/hyhl23/p/4229926.html
Copyright © 2011-2022 走看看