版权声明:本文为博主原创文章。未经博主同意不得转载。 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. vector中数据释放崩溃问题

    struct LINE { char securityID[32]; /*!< 证券代码 */ int64_t dateTime; /*!< 日期时间(日期变化)YYYYMMDDhhmms ...

  2. 【刷题】java 常见的几种运行时异常RuntimeException

    常见的几种罗列如下: -NullPointerException - 空指针引用异常 ClassCastException - 类型强制转换异常. IllegalArgumentException - ...

  3. 记一次redis读取超时的排查过程(SADD惹的祸)

    问题背景 在业务使用redis过程中,出现了read timeout 的异常. 问题排查 直接原因 运维查询redis慢查询日志,发现在异常时间节点,有redis慢查询日志,执行sadd 命令花费了1 ...

  4. rpmgraph - 显示 RPM 软件包依赖关系图

    SYNOPSIS rpmgraph PACKAGE_FILE ... DESCRIPTION rpmgraph 使用 PACKAGE_FILE 参数来产生一个软件包依赖关系图.每个 PACKAGE_F ...

  5. React(6) --双向数据绑定及列表数据循环

    React双向数据绑定:model改变影响view,view改变反过来影响model import React,{Component} from 'react'; class Todolist ext ...

  6. Helm安装服务端tiller出现的问题

    一.首先,我是看尚硅谷视频跟着操作出现了问题,视频链接:https://www.bilibili.com/video/av66617940/?p=58 再说下大概的部署流程 Helm 部署 Helm ...

  7. Mysql --09 Innodb核心特性——事务

    目录 Innodb核心特性--事务 1.什么是事务 2.事务的通俗理解 3.事务ACID特性 4.事务流程举例 5.事务的控制语句 6.事务隐式提交情况 7.事务日志redo基本功能 8.redo数据 ...

  8. bzoj1002 轮状病毒 暴力打标找规律/基尔霍夫矩阵+高斯消元

    基本思路: 1.先观察规律,写写画画未果 2.写程序暴力打表找规律,找出规律 1-15的答案:1    5    16    45    121 320 841     2205   5776 151 ...

  9. 前端每日实战:53# 视频演示如何用纯 CSS 创作一个文本淡入淡出的 loader 动画

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/ERwpeG 可交互视频 此视频是可 ...

  10. Java遍历集合的几种方法

    遍历集合的几种方法 用不同的方法遍历集合. public interface Iterator:对Collection进行迭代的迭代器.迭代器取代了Java Collections FrameWork ...