标签:
FMDB是ios平台下解析sqlite的第三方数据库管理框架,使用非常方便,而且提供了多线程安全的数据库操作,相比coredata来说更加灵活和轻量级。
fmdb主要有三个类别:
fmdatabase:用来执行sql语句;
fmresultset:用来使用fmdatabase执行查询后的结果集合
fmdatabasequeue:用来在多线程中查询和更新数据,它是线程安全的。
fmdb的使用
1.在新建的项目中,导入libsqlite3的动态数据库:
注:(在Building Phases中的Link Binary WithLibraries中添加)
2.加入第三方框架fmdb中的这些主要文件:
3.在代码中建立一个数据库,并指定文件路径:
1 //指定沙盒路径 2 NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 3 //在指定沙盒路径下添加sqlite文件 4 NSString *filepath = [path stringByAppendingPathComponent:@"moxue.sqlite"]; 5 //在指定path路径下创建数据库 6 FMDatabase *db = [FMDatabase databaseWithPath:filepath]; 7 //查看是否打开成功 8 if (![db open]) { 9 return; 10 }else{ 11 NSLog(@"打开成功"); 12 }
4.在代码中添加列表和列表属性:
1 //在数据库中创建一个列表,并添加列表属性 2 BOOL result = [db executeUpdate:@"CREATE TABLE IF NOT EXISTS data(id INTEGER PRIMARY KEY AUTOINCREMENT,Title TEXT,date TEXT,Context TEXT,Url TEXT)"]; 3 if (result) { 4 NSLog(@"创建data表成功"); 5 }else{ 6 NSLog(@"创建data表失败"); 7 }
5.在列表中插入数据:
1 //插入数据 2 BOOL res = [db executeUpdate:@"INSERT INTO data (Title,date,Context,Url) VALUES(?,?,?,?)",@"墨雪",@"2015-10-11",@"我的表格",@"我的Url"]; 3 BOOL res1 = [db executeUpdate:@"INSERT INTO data (Title,date,Context,Url) VALUES(?,?,?,?)",@"刘庆",@"2015-10-10",@"刘庆的表格",@"刘庆的Url"]; 4 if (res1) { 5 NSLog(@"插入data成功"); 6 }else{ 7 NSLog(@"插入data表失败"); 8 }
6.在类表中删除数据或者列表:
1 BOOL dele = [db executeUpdate:@"DROP TABLE IF EXISTS data"]; 2 BOOL dele1 = [db executeUpdate:@"delete from data where Title = ‘墨雪‘"]; 3 if (dele) { 4 NSLog(@"删除数据成功"); 5 }else{ 6 NSLog(@"删除数据失败"); 7 }
7.在列表中修改数据:
1 //修改数据 2 BOOL UPDATE = [db executeUpdate:@"update data SET Title = ‘哈哈‘ WHERE id = 1" ]; 3 if (UPDATE) { 4 NSLog(@"修改成功"); 5 }else{ 6 NSLog(@"修改失败"); 7 }
8.在列表中查询数据:
1 //查询数据 2 FMResultSet *RS = [db executeQuery:@"SELECT Title from data"]; 3 while ([RS next]) { 4 NSString *name = [RS stringForColumn:@"Title"]; 5 NSLog(@"%@",name); 6 }
9. 如果应用中使用了多线程操作数据库,那么就需要使用FMDatabaseQueue来保证线程安全了。 应用中不可在多个线程中共同使用一个FMDatabase对象操作数据库,这样会引起数据库数据混乱。 为了多线程操作数据库安全,FMDB使用了FMDatabaseQueue,使用FMDatabaseQueue很简单,首先用一个数据库文件地址来初使化FMDatabaseQueue,然后就可以将一个闭包(block)传入inDatabase方法中。 在闭包中操作数据库,而不直接参与FMDatabase的管理。
1 FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:filepath]; 2 dispatch_queue_t myq1 = dispatch_queue_create("myqueue1", nil); 3 dispatch_async(myq1, ^{ 4 [queue inDatabase:^(FMDatabase *db) { 5 FMResultSet *RS = [db executeQuery:@"SELECT Title from data"]; 6 while ([RS next]) { 7 NSString *name = [RS stringForColumn:@"Title"]; 8 NSLog(@"%@",name); 9 } 10 11 }]; 12 });
10.关闭数据库
1 [db close];
11.另外 FMResultSet 还提供了很多方法来获得所需的格式的值:
标签:
原文地址:http://www.cnblogs.com/moxuexiaotong/p/4870438.html