1、打开数据库
先要获取沙盒的数据库文件名,并创建数据库文件名,定数据库:
@property (nonatomic, strong) FMDatabase *db;
// 0.获得沙盒中的数据库文件名
NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"student.sqlite"];
// 1.创建数据库实例对象
self.db = [FMDatabase databaseWithPath:filename];
// 2.打开数据库
if ( [self.db open] ) {
NSLog(@"数据库打开成功");
// 创表
BOOL result = [self.db executeUpdate:@"create table if not exists t_student (id integer primary key autoincrement, name text, age integer);"];
if (result) {
NSLog(@"创表成功");
} else {
NSLog(@"创表失败");
}
} else {
NSLog(@"数据库打开失败");
}
2、FMDB的核心类
FMDB有三个主要的类:
FMDatabase:一个FMDatabase对象就代表一个单独的SQLite数据库;用来执行SQL语句
FMResultSet:使用FMDatabase执行查询后的结果集
FMDatabaseQueue:用于在多线程中执行多个查询或更新,它是线程安全的
3、执行更新
使用executeUpdate:方法执行更新:
- (BOOL)executeUpdate:(NSString*)sql, ... // 添加数据库更新语句,除了查找,其他都用更新语句
- (BOOL)executeUpdateWithFormat:(NSString*)format, ...
-(BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments
4、执行查询
- (FMResultSet *)executeQuery:(NSString*)sql, ...
- (FMResultSet *)executeQueryWithFormat:(NSString*)format, ...
- (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments
示例:
// 查询数据
FMResultSet *rs = [db executeQuery:@"SELECT * FROM t_student"];
// 遍历结果集
while ([rs next]) {
NSString *name = [rs stringForColumn:@"name"];
int age = [rs intForColumn:@"age"];
double score = [rs doubleForColumn:@"score"];
}
5、FMDB事务的使用
// 开启事务
[db beginTransaction];
// [db executeUpdate:@"begin transaction;"];
// 更新数据
[db executeUpdate:@"update t_student set age = ? where name = ?;", @20, @"jack"];
[db executeUpdate:@"update t_student set age = ? where name = ?;", @20, @"jack"];
// 提交事务
[db commit];
//[db executeUpdate:@"commit transaction;"];
注意:其中有一条失败了,就会出错,发现情况不对,可以使用回滚事务:
if (发现情况不对)
{
// 回滚事务
[db rollback];
// [db executeUpdate:@"rollback transaction;"];
}