iOS中 FMDB第三方SQLite数据库 UI

1.什么是FMDB?

FMDB是iOS平台下SQLite数据库,只不过它是OC方式封装了C语言的SQLite语句,使用起来更加面向对象

2.FMDB的优点:1.使用起来更加面向对象; 2.对比苹果自带的 Core Data 数据管理工具更加的轻量级,更加的灵活,而且FMDB支持跨平台; 3.提供多线程下的数据安全保护机制,有效地防止数据混乱

3.FMDM中重要的类:

FMDBDataBase: 它代表一个数据库对象,(我们需要创建数据库对象时就使用这个类)

FMDBDataBaseQueue: 它提供多线程下执行查找删除,,或者更新的数据安全保护

FMResultSet: 用来存储sql语句执行结果的集(我们执行完sql语句后得到的结果都在这个类的对象中)

ViewController.m

#import "FMDB.h"#import "Person.h"#import "DetailViewController.h"@interface ViewController ()@property(nonatomic,retain)FMDatabase *db;@property(nonatomic,retain)NSMutableArray *dataArray;//存储查询到的所有Person对象@end@implementation ViewController- (void)dealloc{self.db = nil;self.dataArray = nil;[super dealloc];}- (NSMutableArray *)dataArray{if (_dataArray == nil) {self.dataArray = [NSMutableArray arrayWithCapacity:0];}return [[_dataArray retain]autorelease];}

调用:(介绍FMDB)

– (void)viewDidLoad {[super viewDidLoad];//获取Documents文件夹路径NSString *urlString = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];//在Documents文件夹里创建数据库文件 db.sqliteNSString *dbPath = [urlString stringByAppendingPathComponent:@"db.sqlite"];//创建数据库对象//参数:数据库的路径//执行结束后并没有帮我们生成数据库文件,只是帮我们创建了数据库对象FMDatabase *db = [FMDatabase databaseWithPath:dbPath];NSLog(@"%@",NSHomeDirectory());//代开数据库//open操作才帮我们真正的创建数据库文件,且如果已经打开,直接返回YES,此时可以直接使用,如果打开失败会打印报错信息 BOOL isOpen = [db open];if (isOpen) {NSLog(@"打开成功");//创建表格//executeUpdate 除了查询之外,其他数据创建表格,插入数据、删除数据都是用这个方法//blob 二进制流 相当于oc的NSDataBOOL isCreat = [db executeUpdate:@"create table if not exists Person(id integer primary key autoincrement,name text,gender text,age integer,photo blob)"];NSLog(@"%@",isCreat ? @"建表成功":@"建表失败");}else{NSLog(@"打开失败");}//给属性赋值self.db = db;NSLog(@"%@",NSHomeDirectory());}

插入:

– (IBAction)insert:(UIButton *)sender {Person *p = [[Person alloc]initWithName:@"郭美美" gender:@"女" age:20 photo:[UIImage imageNamed:@"3.gif"]];//将图片转化成NSData对象NSData *data = UIImagePNGRepresentation(p.photo);//@(p.age)参数必须是对象类型的才能使用//插入操作 BOOL isInsert = [self.db executeUpdate:@"insert into Person(name,gender,age,photo)values(?,?,?,?)",p.name,p.gender,@(p.age),data];NSLog(@"%@",isInsert ? @"插入成功":@"插入失败");}

删除:

– (IBAction)delete:(UIButton *)sender {//根据条件删除BOOL result = [self.db executeUpdate:@"delete from Person where id = ?",@3];NSLog(@"%@",result ? @"删除成功":@"删除失败");//删除全部表格内容// BOOL isResult1 = [self.db executeUpdate:@"delete from Person"];//删除表格// BOOL isResult2 = [self.db executeUpdate:@"drop table Person"];}

更新:

– (IBAction)update:(UIButton *)sender {BOOL isUpdate = [self.db executeUpdate:@"update Person set gender = ? where id = ?",@"男",@4];NSLog(@"%@",isUpdate ? @"更新成功":@"更新失败");}

查询:

– (IBAction)select:(UIButton *)sender {//查询全部FMResultSet *set = [self.db executeQuery:@"select * from Person"];//按条件查询// FMResultSet *set = [self.db executeQuery:@"select *from Person where name = ?",@"郭美美"];self.dataArray = [NSMutableArray arrayWithCapacity:0];//循环取出表中的数据//[set next] 判断写一行是否有数据while ([set next]) {//取出每一个字段对应的数据NSInteger ID = [set intForColumn:@"id"];//取出id字段下的数据NSString *name = [set stringForColumn:@"name"];//取出name字段下的数据NSString *gender = [set stringForColumn:@"gender"];//取出gender字段下的数据NSInteger age = [set intForColumn:@"age"];//取出age字段下的数据NSData *data = [set dataForColumn:@"photo"];//取出photo字段下的数据//创建model类//将二进制流转成图片UIImage *image = [UIImage imageWithData:data];Person *p = [[Person alloc]initWithName:name gender:gender age:age photo: image];p.ID = ID;[self.dataArray addObject:p];[p release];}}为了展现效果,我们push到下个页面查看效果:

传值使用:

– (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{//获取segue起始端的视图控制器对象ViewController *rootVC = [segue sourceViewController];//通过segue完成跳转的时候会触发这个方法,在跳转之前触发,一般用来传值//获取push过去后的视图控制器对象DetailViewController *detailVC = [segue destinationViewController];//属性传值detailVC.dataSource = rootVC.dataArray;}

准备一个UIViewController:总有看腻的时候,不论何等荣华的身份,

iOS中 FMDB第三方SQLite数据库 UI

相关文章:

你感兴趣的文章:

标签云: