由于为了提高用户体验,越来越多的 App 都做了缓存这项功能,做缓存的方式有很多,今天就简单介绍下三方的数据库, FMDB
#import "ViewController.h"
#import "FMDatabase.h"
@interface ViewController ()
@property(nonatomic,retain)FMDatabase *db;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self openDB];
//插入数据
[self insertData:@"张三" detail:@"不错"];
// [self deleteData:@"张三"];
[self updateData:@"李四" detail:@"很好" oldTitle:@"张三"];
[self selectData];
[self dropTable];
//6.关闭数据库
[self.db close];
}
-(void)openDB
{
//导入sqlite框架,导入FMDB文件夹
//1.获得数据库文件的路径
NSString *doc=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *fileName=[doc stringByAppendingPathComponent:@"student.sqlite"];
NSLog(@"fileName = %@",fileName);
//2.获得数据库
self.db = [FMDatabase databaseWithPath:fileName];
//3.打开数据库
if ([self.db open]) {
NSLog(@"ok");
//4.创表
BOOL result=[self.db executeUpdate:@"CREATE TABLE IF NOT EXISTS lanou3g (id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, detail TEXT NOT NULL);"];
if (result) {
NSLog(@"创表成功");
}else{
NSLog(@"创表失败");
}
}
}
#pragma mark 插入数据
-(void)insertData:(NSString *)title detail:(NSString *)detail
{
//如果用stringWithFormat时,sql语句中可以用'%@'
NSString *sql = [NSString stringWithFormat:@"INSERT INTO lanou3g (title, detail) VALUES ('%@', '%@')",title,detail];
BOOL result = [self.db executeUpdate:sql];
if (result) {
NSLog(@"插入成功");
}else
{
NSLog(@"插入成功");
}
}
#pragma mark 删除数据
-(void)deleteData:(NSString *)title
{
NSString *deleteSql = [NSString stringWithFormat:
@"DELETE FROM lanou3g WHERE title = '%@'",title];
BOOL res = [self.db executeUpdate:deleteSql];
if (res) {
NSLog(@"删除成功");
} else {
NSLog(@"删除失败");
}
}
#pragma mark 销毁表格
-(void)dropTable
{
[self.db executeUpdate:@"DROP TABLE IF EXISTS lanou3g"];
//4.创表
BOOL result=[self.db executeUpdate:@"CREATE TABLE IF NOT EXISTS lanou3g (id integer PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, detail TEXT NOT NULL)"];
if (result) {
NSLog(@"再次创表成功");
}else{
NSLog(@"再次创表失败");
}
}
//需要注意
//a. executeUpdate : 不确定的参数用?来占位 (后面参数必须都是oc对象)
// [self.db executeUpdate:@"delete from t_student where id=?;",@(idNum)];
//b. executeUpdateWithFormat : 不确定的参数用%@、%d等来占位
// [self.db executeUpdateWithFormat:@"delete from t_student where name=%@;",@"apple9_name"];
#pragma mark 修改数据
-(void)updateData:(NSString *)title detail:(NSString*)detail oldTitle:(NSString *)oldTitle
{
//也可以这样
// NSString *sql = [NSString stringWithFormat:@"UPDATE lanou3g SET title = '%@', detail = '%@' WHERE title = '%@'", title, detail, oldTitle];
// BOOL result =[self.db executeUpdate:sql];
//下面的不行,不好用
// BOOL result = [self.db executeUpdateWithFormat:@"UPDATE lanou3g SET title = '%@', detail = '%@' WHERE title = '%@'", title, detail, oldTitle];
BOOL result =[self.db executeUpdate:@"UPDATE lanou3g SET title = ?, detail = ? WHERE title = ?", title, detail, oldTitle];
if (result) {
NSLog(@"修改成功");
}else
{
NSLog(@"修改失败");
}
}
#pragma mark 查询数据
-(void)selectData
{
//1.执行查询语句
FMResultSet *resultSet = [self.db executeQuery:@"select * from lanou3g"];
//2.遍历结果集合
while ([resultSet next]) {
int idNum = [resultSet intForColumn:@"id"];
NSString *title = [resultSet objectForColumnName:@"title"];
NSString *detail = [resultSet objectForColumnName:@"detail"];
NSLog(@"id=%i ,title=%@, detail=%@",idNum,title,detail);
}
}
@end
到这里关于 FMDB 简单的功能就都能实现了