一 . 使用
在FMDB中三个重要的类
1.FMDatabase: 是一个提供SQLite 数据库的类,用于执行SQL语句
2.FMResultSet: 用在FMDatabase中执行查询的结果的类
3. FMDatabaseQueue :在多线程下查询和更新数据库用到的类
二. 数据库初始化(包括打开数据库和创建表)
三. 数据库操作
1.增: 方法: -executeUpdate....
2.删 :方法: -executeUpdate....
3.改 方法: -executeUpdate....
4 查 方法: -executeQuery...(相比前三个不同)
执行查询操作后,如果成功后会返回一个 FMResultSet对象,反之会返回nil。然后可以用 while() 循环查看记录,例如:
FMResultSet提供了很多方便的方法来查询数据
intForColumn: longForColumn: longLongIntForColumn:
boolForColumn: doubleForColumn: stringForColumn:
dateForColumn: dataForColumn: dataNoCopyForColumn:
UTF8StringForColumn: objectForColumn:
四. 线程安全
在多个线程中同时使用一个FMDatabase实例是不明智的。不要让多个线程分享同一个FMDatabase实例,它无法在多个线程中同时使用。 如果在多个线程中同时使用一个FMDatabase实例,会造成数据混乱等问题。所以,请使用 FMDatabaseQueue,它是线程安全的。以下是使用方法:
1.创建
NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES).firstObject;
NSString *filePath = [path stringByAppendingPathComponent:@"FMDB.db"];
FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:path];
2.操作数据
[queue inDatabase:^(FMDatabase*db) {
//FMDatabase数据库操作
if (![db open]) {
NSLog(@"打开数据库失败");
return ;
}
//创建表(FMDB中只有update和query操作,除了查询其他都是update操作)}];
[db executeUpdate:@"create table if not exists user(name text,gender text,age integer) "];
//插入数据
BOOL inser = [db executeUpdate:@"insert into user values(?,?,?)",_nameTextField.text,_sexTextField.text,_ageTextField.text];
[db close];
}
4.事物
假如你要对数据库中的Stutent表插入新数据,那么该事务的具体过程是:开始新事物->插入数据->提交事务,那么当我们要往该表内插入500条数据,如果按常规操作处理就要执行500次“开始新事物->插入数据->提交事务”的过程。
,举个例子:假如北京的一家A工厂接了上海一家B公司的500件产品的订单,思考一下:A工厂是生产完一件立即就送到B公司还是将500件产品全部生产完成后再送往B公司?答案肯定是后者,因为前者浪费了大量的时间、人力物力花费在往返于北京和上海之间。同样这个道理也能用在我们的数据库操作上,
SQLite进行事务的SQL语句:
只要在执行SQL语句前加上以下的SQL语句,就可以使用事务功能了:
开启事务的SQL语句,"begin transaction;"
进行提交的SQL语句,"commit transaction;"
进行回滚的SQL语句,"rollback transaction;"
//FMDatabase事务
//FMDatabaseQueue事务
原文链接:http://www.jianshu.com/p/71ed016cb1fe