FMDB是一个很强大的数据库操作工具,对于ios开发者来说,省去了极大一部分操作sqlite需要的时间,让我们可以更加专注于自己工程的核心代码.
这里对FMDB封装了一个DBCache类,简要的说明问题
关于数据持久化的问题,这里有一篇非常棒的文章推荐给大家:传送门
//DBCache.h
#import <Foundation/Foundation.h>
#import <FMDB.h>
@interface DBCache : NSObject
- (id)init;
- (void)insertStudentWithName:(NSString *)name Address:(NSString *)address andId:(NSString *)id;
- (void)deleteStudentWithName:(NSString *)name;
- (void)updateStudentWhereName:(NSString *)name WithAddress:(NSString *)address andId:(NSString *)id;
- (void)selectStudentWhereName:(NSString *)name andBackBlock:(void(^)(NSString *address, NSString *id))backBlock;
@end
//DBCache.m
#import "DBCache.h"
@implementation DBCache
{
FMDatabase *_db;
}
- (id)init{
self=[super init];
if (self) {
[self createTable];
}
return self;
}
//创建
- (void)createTable{
NSArray *path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *document=[path objectAtIndex:0];
NSString *dbPath=[document stringByAppendingPathComponent:@"FMDB.sqlite"];
NSFileManager *fileManager=[NSFileManager defaultManager];
_db=[FMDatabase databaseWithPath:dbPath];
if (![fileManager fileExistsAtPath:dbPath]) {
NSLog(@"FMDB.sqlite is not exist and is building.....");
if ([_db open]) {
bool cflag=[_db executeUpdate:@"create table if not exists StudentList (name text, address text, id text)"];
if (cflag) {
NSLog(@"create StudentList table Successful");
}
[_db close];
}
NSLog(@"FMDB.sqlite:%@",_db);
}
}
//增
- (void)insertStudentWithName:(NSString *)name Address:(NSString *)address andId:(NSString *)id{
[_db open];
bool inflag=[_db executeUpdate:@"INSERT INTO StudentList (name, address, id) VALUES (?, ?, ?)",name,address,id];
if (inflag){
NSLog(@"insert student successful");
}
[_db close];
}
//删
- (void)deleteStudentWithName:(NSString *)name{
[_db open];
bool dflag=[_db executeUpdate:@"DELETE FROM StudentList WHERE name=?",name];
if (dflag) {
NSLog(@"delete student successful");
}
[_db close];
}
//改
- (void)updateStudentWhereName:(NSString *)name WithAddress:(NSString *)address andId:(NSString *)id{
[_db open];
bool uflag=[_db executeUpdate:@"UPDATE StudentList SET address=?, id=? WHERE name=?",address,id,name];
if(uflag){
NSLog(@"update student successful");
}
[_db close];
}
//查
- (void)selectStudentWhereName:(NSString *)name andBackBlock:(void(^)(NSString *address, NSString *id))backBlock{
[_db open];
NSString *addressOut=[_db stringForQuery:@"SELECT address FROM StudentList WHERE name=?",name];
NSString *idOut=[_db stringForQuery:@"SELECT id FROM StudentList WHERE name=?",name];
[_db close];
backBlock(addressOut,idOut);
}
@end
//ViewController.m中调用该类的方法
DBCache *dbCache=[[DBCache alloc]init];
[dbCache insertStudentWithName:@"小明" Address:@"北京" andId:@"1"];
[dbCache selectStudentWhereName:@"小明" andBackBlock:^(NSString *address, NSString *id) {
NSLog(@"xiaoming address is:%@",address);
NSLog(@"xiaoming id is:%@",id);
}];
[dbCache updateStudentWhereName:@"小明" WithAddress:@"天津" andId:@"2"];
[dbCache selectStudentWhereName:@"小明" andBackBlock:^(NSString *address, NSString *id) {
NSLog(@"xiaoming address is:%@",address);
NSLog(@"xiaoming id is:%@",id);
}];
[dbCache deleteStudentWithName:@"小明"];
[dbCache selectStudentWhereName:@"小明" andBackBlock:^(NSString *address, NSString *id) {
NSLog(@"xiaoming address is:%@",address);
NSLog(@"xiaoming id is:%@",id);
}];