数据库使用之第三方库 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);
}

 

posted @ 2015-01-16 22:59  红红de  阅读(533)  评论(0编辑  收藏  举报