1、什么是FMDB
1. iOS中原生的SQLite API在使用上相当不好用,在使用时,非常不便。于是,就出现了一系列将SQLite API进行封装的代码库,例如FMDB、
PlausibleDatabase、SQLitePersistentObjects等
FMDB是iOS平台的SQLite数据库框架
FMDB以OC的方式封装了SQLite的C语言API
2.FMDB的优点
使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码
对比苹果自带的Core Data框架,更加轻量级和灵活
提供了多线程安全的数据库操作方法,有效地防止数据混乱
2、FMDB下载地址:FMDB (https://github.com/ccgus/fmdb)
3 FMDB常用类
FMDB有三个主要的类
(1)FMDatabase
一个FMDatabase对象就代表一个单独的SQLite数据库
用来执行SQL语句
(2)FMResultSet
使用FMDatabase执行查询后的结果集
(3)FMDatabaseQueue
用于在多线程中执行多个查询或更新,它是线程安全的
4、FMDB使用:github上下载过代码后,工程中必须导入src→fmdb文件夹;
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];
}