<span style="font-size:18px;">//首先,获取数据库的路径,(如果不存在,就是我们想要存储的路径),不用担心每次都创建数据库会重复,不会的,如果没有则创建,有了就不会再重复创建; //接下来,我们要制表,首先我们先查看我们的表是否已经存在,方法在下面代码中;如果存在则跳过,不存在则创建</span> -(void)DataBaseInit { //获取Document文件夹下的数据库文件,没有则创建 NSString *dbPath = [self getDBPath]; FMDatabase *membersDB = [FMDatabase databaseWithPath:dbPath]; if (![membersDB open]) { NSLog(@"open membersDB failed"); return; } //监测数据库中我要需要的表是否已经存在 NSString *existsSql = [NSString stringWithFormat:@"select count(name) as countNum from sqlite_master where type = 'table' and name = '%@'", @"Member" ]; FMResultSet *rs = [membersDB executeQuery:existsSql]; if ([rs next]) { NSInteger count = [rs intForColumn:@"countNum"]; NSLog(@"The table count: %li", count); if (count == 1) { NSLog(@"log_keepers table is existed."); return; } NSLog(@"log_keepers is not existed."); //创建表 //[membersDB executeUpdate:@"CREATE TABLE PersonList (Name text, Age integer, Sex integer,Phone text, Address text, Photo blob)"]; [membersDB executeUpdate:@"CREATE TABLE Member (Name text, Age integer, Sex integer,Height integer, Weight integer, Photo blob)"]; } [rs close]; } -(NSString *)getDBPath { NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString *DBPath = [documentPath stringByAppendingPathComponent:@"members.db"];//成员列表数据库 return DBPath; }
下面是数据成员的添加,不过我首先检查数据库中我要建的成员是否已经存在,避免重复添加
-(void)doneAction:(UIButton *)button { //保存到数据库 membersDB //获取Document文件夹下的数据库文件,没有则创建 NSString *dbPath = [self getDBPath]; FMDatabase *membersDB = [FMDatabase databaseWithPath:dbPath]; if (![membersDB open]) { NSLog(@"open membersDB failed"); return; } //返回数据库中第一条满足条件的结果 //select count(name) as countNum from sqlite_master where type = 'table' and name = '%@'", @"log_keepers FMResultSet *rs =[membersDB executeQuery:@"SELECT COUNT(Name) AS countNum FROM Member WHERE Name = ?",self.nameTextField.text]; while ([rs next]) { NSInteger count = [rs intForColumn:@"countNum"]; NSLog(@"countNum == %i",count); if (count > 0) { // NSLog(@"你要创建的成员,已经创建同名的!"); //下面这个是我用的第三方库,用来提醒,很方便,不用,注释掉即可 _noticeView = [[GCDiscreetNotificationView alloc]initWithText:@"成员已经保存 或者 同名成员已存在!" showActivity:YES inPresentationMode:GCDiscreetNotificationViewPresentationModeTop inView:self.view ]; [_noticeView showAndDismissAutomaticallyAnimated]; } else { //出入数据:刚健的成员添加进去 //插入数据 NSData *imageData = UIImagePNGRepresentation(self.iconImageView.image);//将png图片转化为nsdata BOOL insert = [membersDB executeUpdate:@"INSERT INTO Member (Name, Age, Sex, Height, Weight, Photo) VALUES (?,?,?,?,?,?)",self.nameTextField.text,[NSNumber numberWithInteger:[self.ageTextField.text integerValue]],[NSNumber numberWithInteger:self.sex] ,[NSNumber numberWithInteger:[self.heightTextField.text integerValue]],[NSNumber numberWithInteger:[self.weightTextField.text integerValue]], imageData]; if (insert) { NSLog(@"添加成员成功!!"); } } } //关闭数据库 [membersDB close]; }
项目开发过程中,疑惑很多,fmdb是很容易操作,对我这种SQL小白的菜鸟来说,确实摸索了不少时间!等项目完成,一定要恶补一下数据库的知识!!
项目还在进行中。。。。。。后续还会记录晚上有关数据库的操作。
下面是我开发中参考的一些文章:
ios 常用sql语句分析,非常精辟:点击打开链接 http://www.cnblogs.com/wengzilin/archive/2012/03/27/2419851.html
iOS开发中使用FMDB解决数据存储问题 :http://witcheryne.iteye.com/blog/1917120
FMDB使用的一点心得:数据库创建、制表、查询等以及image转换成二进制nsdata保存到数据库中,布布扣,bubuko.com