之前都是直接用sqlite 的C语言API,感觉也没有什么不好用的,就是封装性不好,不能重用;CoreData也用过,感觉太笨重,真心不好用。
从今天开始学下FMDB和WCDB.
一、简单说明
FMDB是iOS平台的SQLite数据库框架,它以OC的方式封装了 sqlite 的C 语言API。
它的优点有:
1、更加面向对象,省去了大量的冗余的C语言代码
2、相比CoreData,更加轻量级和灵活
3、提供了多线程安全的数据库操作方法,有效地防止数据混乱
二、核心类
1、FMDatabase
数据库对象,一个FMDatabase对象就代表一个独立的sqlite数据库,可以用来执行各种sql语句。
2、FMResultSet
结果集,sql语句的执行结果
3、FMDatabaseQueue
线程安全的队列,用于在多线程环境中执行查询或修改操作
三、增删改查
在增删改查之前,要先创建表结构。
在FMDB中,除了查询以外,所有的操作都是update,包括建表。
打开数据库:
NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSString *dbPath = [docPath stringByAppendingString:@"/test.db"];
FMDataBase *db = [FMDatabase databaseWithPath:dbPath];
1、创建表结构:
if([db open]) {
NSString *sql = @" create table if not exists student('ID' INTEGER PRIMARY KEY AUTOINCREMENT,'name' TEXT NOT NULL,'phone' TEXT NOT NULL,'score' INTEGER NOT NULL)";
BOOLflag = [self.dbexecuteUpdate:sql];
if(flag) {
NSLog(@"create table success");
}
}
2、新增
NSString *sql = [NSString stringWithFormat:@"insert into student (name,phone,score) values (?,?,?)"];
BOOL result = [self.db executeUpdate:sql withArgumentsInArray:@[@"lzt",@"13569874154",@(69)]];
if(result) {
NSLog(@"insert ok");
}
3、修改
NSString *sql = [NSString stringWithFormat:@"update student set name = ? where id = ? "];
BOOL result = [self.db executeUpdate:sql withArgumentsInArray:@[@"lztOK",@(2)]];
if(result) {
NSLog(@"update ok");
}
4、删除
NSString *sql = [NSString stringWithFormat:@" delete from student where id = ? "];
BOOL result = [self.db executeUpdate:sql withArgumentsInArray:@[@(1)]];
if(result) {
NSLog(@"delete ok");
}
最后,要记得关闭数据库 [db close]
网友评论