内容主要是从别人的文章中摘取,并进行总结。这里,我把所有方法放在一个函数里,使用时根据需要进行分离。
引入头文件:
#import "FMDatabase.h"
#import "FMDatabaseAdditions.h"
函数:
-(void)initFMDB{
// 0.path
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [paths objectAtIndex:0];
NSString *dbPath = [documentDirectory stringByAppendingPathComponent:@"MyDatabase.db"];
// 1.首先,你要使用一个数据库文件的路径来构造一个FMDB对象:
FMDatabase *db = [FMDatabase databaseWithPath:dbPath];//这里要给一个完整的doc路径.如果没有这个数据库,FMDB将会自动创建
// 2.然后我们要打开数据库,这样才能进行后续的相关操作:
if ([db open] == YES) {
NSLog(@"open success.");
}else {
NSLog(@"open fail.");
return;
}
// 3.CREATE TABLE
[db executeUpdate:@"CREATE TABLE PersonList (Name text, Age integer, Sex integer, Phone text, Address text, Photo blob)"];
// 4.两种操作:1。更新操作(插入、更新、删除)2。请求操作(select)
/**
在SQLite中的,“text对应:NSString”,“integer对应NSNumber”,“blob则是NSData”。该做的转换FMDB都做好了,只要了解SQLite语法
*/
//---------------4.1------------------------
// 4.1.1 插入资料跟前面一样,用executeUpdate后面加语法就可以了。比较不同的是,因為插入的资料会跟Objective-C的变数有关,所以在string裡使用?号来代表这些变数。
[db executeUpdate:@"INSERT INTO PersonList (Name, Age, Sex, Phone, Address, Photo) VALUES (?,?,?,?,?,?)",@"Jone", [NSNumber numberWithInt:20], [NSNumber numberWithInt:0], @"091234567", @"Taiwan, R.O.C", [NSData dataWithContentsOfFile: @""]];
// 4.1.2 更新数据库
[db executeUpdate:@"UPDATE PersonList SET Age = ? WHERE Name = ?",[NSNumber numberWithInt:30],@"John"];
//---------------4.2------------------------
// 4.2.1 获取数据库资料
// 取得特定的资料,则需使用FMResultSet物件接收传回的内容
FMResultSet *rs = [db executeQuery:@"SELECT Name, Age, FROM PersonList"];
while ([rs next]) {
NSString *name = [rs stringForColumn:@"Name"];
int age = [rs intForColumn:@"Age"];
}
[rs close];
// 4.2.2 快速取得资料
/**
在有些时候,只会query某一个row裡特定的一个数值(比方只是要找John的年龄),FMDB提供了几个比较简便的方法。这些方法定义在FMDatabaseAdditions.h,如果要使用,记得先import进来。
*/
//找地址
NSString *address = [db stringForQuery:@"SELECT Address FROM PersonList WHERE Name = ?",@"John"];
//找年龄
int age = [db intForQuery:@"SELECT Age FROM PersonList WHERE Name = ?",@"John"];
[db close];//使用完 要关闭!
}