版权声明:本文为博主原创文章。未经博主同意不得转载。 https://blog.csdn.net/u012951123/article/details/36871955

<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是非常easy操作,对我这样的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保存到数据库中的更多相关文章

  1. net9:图片文件转换成二进制流存入SQL数据库,以及从数据库中读取二进制流输出文件

    原文发布时间为:2008-08-10 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...

  2. 支持“***Context”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。

    在用VS进行MVC开发的过程中遇到如下问题: 支持“***Context”上下文的模型已在数据库创建后发生更改.请考虑使用 Code First 迁移更新数据库(http://go.microsoft ...

  3. "ApplicationDbContext"(泛指之类的数据库上下文模型)上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库。

    一,在我使用自动生成数据库的时候,当你改变了数据库就会出现下面问题 "ApplicationDbContext"(泛指之类的数据库上下文模型)上下文的模型已在数据库创建后发生更改. ...

  4. System.InvalidOperationException: 支持“XXX”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。

    System.InvalidOperationException: 支持“XXX”上下文的模型已在数据库创建后发生更改.请考虑使用 Code First 迁移更新数据库(http://go.micro ...

  5. 支持“xxxContext”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库

    将项目的数据库连接用户及密码修改后(切换用户,用户名与原来不一样,用户下对象结构一致),报以下错误: 支持“XXXDBContext”上下文的模型已在数据库创建后发生更改.请考虑使用 Code Fir ...

  6. 错误:支持“EFDbContext”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId

    支持"EFDbContext"上下文的模型已在数据库创建后发生更改.请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/ ...

  7. 支持“EFDBContext”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库

    在修改数据库表后会出现 支持"EFDBContext"上下文的模型已在数据库创建后发生更改.请考虑使用 Code First 迁移更新数据库 这个问题解决方法: 在Global.a ...

  8. C#图片转换成二进制流并且保存到sql server数据库

    注意:我要存储文件二进制流的列的类型是text,不是image类型. 我已经实现了从数据库中读取text类型的二进制流,,现在就是不知道怎么存进去. 我的部分关键代码: StreamReader sr ...

  9. Django数据库创建与查询及ORM的概念

    ORM:是封装在pymysql上层的文件.他的作用是把python语句转换成sql语句,从而去数据库里操作数据.从数据库里获得的数据,经过orm转换为对象,对象可以直接调用属性获得值.orm本质是个中 ...

随机推荐

  1. linux ---maven的安装和配置

    linux下的maven的安装和配置:本人使用的是apache-maven-3.3.9-bin.tar.gz------安装maven的前提是JDK安装成功:java -version 测试一下--J ...

  2. MongoDB的日志系统

    mongodb中主要有四种日志.分别是系统日志.Journal日志.oplog主从日志.慢查询日志等.这些 日志记录着Mongodb数据库不同方便的踪迹.下面分别介绍这四种日志: 1.系统日志 系统日 ...

  3. Spring---条件注解@Conditional

    1.概述 1.1.Spring4  提供了一个更通用的  基于条件的Bean的创建,即使用@Conditional注解: 1.2.案例 package com.an.config; import co ...

  4. TensorFlow学习笔记(一)

    光复制几个代码到自己机器上跑是没有用的.要理解!公式理解有困难,就用图片辅助理解! MNIST中数字的表示方法 什么是one-hot? "One-hot" encoding mea ...

  5. DB事务隔离级别

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11393417.html 事务隔离级别 Note: Oracle默认的隔离级别是 READ COMMIT ...

  6. linux(二)用户和用户组管理

    root用户可以访问自己的家目录,访问配置文件,访问普通用户的家目录 普通用户只能访问自己的家目录和root用户开放的目录 普通用户之间无法访问对方的家目录 创建用户,用id查看用户信息,root的u ...

  7. Spring框架之接口实现覆盖(接口功能扩展)

    在日常开发中,存在着这种一种场景,框架对接口A提供了一个种默认的实现AImpl,随着需求的变更,现今AImpl不能满足了功能需要,这时,我们该怎么办? 当然是修改AImpl的实现代码了,但是,如果它是 ...

  8. Struts2基础-1- 简单java类实现Action控制器

    Strut2中,Action可以不继承任何特殊的类或不实现任何特殊的接口,可以只编写一个普通的Java类作为Action类,只要该类含有一个返回字符串的无参的public方法即可!实际开发中,通常继承 ...

  9. loadRunner函数之web_add_header

    web_add_header 功能:用于添加指定的报文头到下一次HTTP请求 格式:web_add_header( const char *Header, const char *Content ), ...

  10. zoj3229 Shoot the Bullet (有源汇最大流)

    题目大意:文文要给幻想乡的女♂孩子们拍照,一共n天,m个女♂孩子,每天文文至多拍D[i]张照片,每个女♂孩子总共要被文文至少拍G[i]次.在第i天,文文可以拍c[i]个女♂孩子,c[i]个女♂孩子中每 ...