在iOS开发中数据存储较多数据首先想到的要算数据库。sqlite是一个轻量级、跨平台的小型数据库,其拥有可移植性高、有着和MySql几乎相同的数据库语句以及无需服务器即可使用的优点:
一、可以存储大量的数据,存储和检索的速度非常快;
二、能对数据进行大量的聚合,这样比起使用对象来进行这些操作要快。
当然,它也具有明显的缺点:
一、它没有提供数据库的创建方式;
二、它基于C语言框架设计,没有面向对象的API,所以使用起来比较麻烦;
三、复杂的数据模型的数据建表相对而言比较麻烦。
通常,我们都是使用基于sqlite封装的开源数据库FMDB来减少使用sqlite的工作量,无论ARC和MRC都能应付自如,FMDB会在编译时自动匹配。
简单介绍一下FMDB的使用
1.首先指定数据存储路径,通常在Document目录下边;
//数据库文件存储路径
NSString *documentDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *dbPath = [documentDirectory stringByAppendingPathComponent:@"Data.db"];
//创建数据库实例
db = [[FMDatabase alloc] initWithPath:dbPath];
2.创建表//创建表
- (void)creatTable{
//打开数据库
if ([db open]) {
//开启事务
[db beginTransaction];
//简单创建表语句
NSString *sql = @"create table if not exists person (id integer primary key autoincrement, name text, age integer, address text)";
BOOL rec = [db executeUpdate:sql];
if (rec) {
NSLog(@"创建表成功");
}
//提交结束事务,不可缺少。不然会生成数据库临时文件。
[db commit];
}
}
3.插入一条数据:- (void)insertTable{
if ([db open]) {
NSString *sql = @"insert into person (name, age, address) values (\"张三\",25,\"上海市\")";
BOOL rec = [db executeUpdate:sql];
if (rec) {
NSLog(@"插入数据成功");
} else {
NSLog(@"插入数据失败");
}
}
}
4.查询表数据,例如查询id>3的全部数据:- (NSMutableArray *)selectdata{
if ([db open]) {
NSString *sql = @"select * from person where id > 3";
FMResultSet *rs = [db executeQuery:sql];
if (rs) {
NSMutableArray *resurt = [NSMutableArray array];
while ([rs next]) {
NSDictionary *dic = [rs resultDictionary];
[resurt addObject:dic];
}
return resurt;
}
}
return nil;
}
5.更新一条数据,例如更新address为“北京市”:- (void)updateTable{
if ([db open]) {
NSString *sql = @"update person set address = \"北京市\"";
BOOL rec = [db executeUpdate:sql];
if (rec) {
NSLog(@"修改成功");
}
}
}
6.删除数据,例如删除id>3的行- (void)deleteData{
if ([db open]) {
NSString *sql = @"delete from person where id < 3";
BOOL rec = [db executeUpdate:sql];
if (rec) {
NSLog(@"删除成功");
}
}
}
总结:1、除查询以外的操作都成为更新;2、使用FMDataBaseQueue在多线程下保证数据不至于混乱(另行研究);
数据持久化之FMDB--基本使用
最新推荐文章于 2024-09-19 21:52:00 发布