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

  1. <span style="font-size:18px;">//首先,获取数据库的路径,(假设不存在,就是我们想要存储的路径),不用操心每次都创建数据库会反复,不会的,假设没有则创建,有了就不会再反复创建。
  2. //接下来。我们要制表,首先我们先查看我们的表是否已经存在,方法在以下代码中;假设存在则跳过。不存在则创建</span>
  3. -(void)DataBaseInit
  4. {
  5. //获取Document目录下的数据库文件,没有则创建
  6. NSString *dbPath = [self getDBPath];
  7. FMDatabase *membersDB = [FMDatabase databaseWithPath:dbPath];
  8. if (![membersDB open]) {
  9. NSLog(@"open membersDB failed");
  10. return;
  11. }
  12. //监測数据库中我要须要的表是否已经存在
  13. NSString *existsSql = [NSString stringWithFormat:@"select count(name) as countNum from sqlite_master where type = 'table' and name = '%@'", @"Member" ];
  14. FMResultSet *rs = [membersDB executeQuery:existsSql];
  15. if ([rs next]) {
  16. NSInteger count = [rs intForColumn:@"countNum"];
  17. NSLog(@"The table count: %li", count);
  18. if (count == 1) {
  19. NSLog(@"log_keepers table is existed.");
  20. return;
  21. }
  22. NSLog(@"log_keepers is not existed.");
  23. //创建表
  24. //[membersDB executeUpdate:@"CREATE TABLE PersonList (Name text, Age integer, Sex integer,Phone text, Address text, Photo blob)"];
  25. [membersDB executeUpdate:@"CREATE TABLE Member (Name text, Age integer, Sex integer,Height integer, Weight integer, Photo blob)"];
  26. }
  27. [rs close];
  28. }
  29. -(NSString *)getDBPath
  30. {
  31. NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
  32. NSString *DBPath = [documentPath stringByAppendingPathComponent:@"members.db"];//成员列表数据库
  33. return DBPath;
  34. }

以下是数据成员的加入。只是我首先检查数据库中我要建的成员是否已经存在,避免反复加入

  1. -(void)doneAction:(UIButton *)button
  2. {
  3. //保存到数据库 membersDB
  4. //获取Document目录下的数据库文件。没有则创建
  5. NSString *dbPath = [self getDBPath];
  6. FMDatabase *membersDB = [FMDatabase databaseWithPath:dbPath];
  7. if (![membersDB open]) {
  8. NSLog(@"open membersDB failed");
  9. return;
  10. }
  11. //返回数据库中第一条满足条件的结果
  12. //select count(name) as countNum from sqlite_master where type = 'table' and name = '%@'", @"log_keepers
  13. FMResultSet *rs =[membersDB executeQuery:@"SELECT COUNT(Name) AS countNum FROM Member WHERE Name = ?
  14. ",self.nameTextField.text];
  15. while ([rs next]) {
  16. NSInteger count = [rs intForColumn:@"countNum"];
  17. NSLog(@"countNum == %i",count);
  18. if (count > 0) {
  19. // NSLog(@"你要创建的成员,已经创建同名的!
  20. ");
  21. //以下这个是我用的第三方库,用来提醒。非常方便,不用,凝视掉就可以
  22.  _noticeView = [[GCDiscreetNotificationView alloc]initWithText:@"成员已经保存 或者 同名成员已存在。" showActivity:YES inPresentationMode:GCDiscreetNotificationViewPresentationModeTop inView:self.view ];
  23. [_noticeView showAndDismissAutomaticallyAnimated];
  24. }
  25. else
  26. {
  27. //出入数据:刚健的成员加入进去
  28. //插入数据
  29. NSData *imageData = UIImagePNGRepresentation(self.iconImageView.image);//将png图片转化为nsdata
  30. BOOL insert = [membersDB executeUpdate:@"INSERT INTO Member (Name, Age, Sex, Height, Weight, Photo) VALUES (?
  31. ,?
  32. ,?,?
  33. ,?,?)",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];
  34. if (insert) {
  35. NSLog(@"加入成员成功!!
  36. ");
  37. }
  38. }
  39. }
  40. //关闭数据库
  41. [membersDB close];
  42. }

项目开发过程中,疑惑非常多,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. Sass函数-join()函数

    join() 函数是将两个列表连接合并成一个列表. >> join(10px 20px, 30px 40px) (10px 20px 30px 40px) >> join((b ...

  2. java super与this关键字图解、java继承的三个特点

  3. 第01章 Spring概述

    第01章 Spring概述 1.Spring概述 ①Spring是一个开源框架 ②Spring为简化企业级开发而生,使用Spring,JavaBean就可以实现很多以前要靠EJB才能实现的功能.同样的 ...

  4. H2database创建表

    语法和sql server大同小异 create table users(id int primary key not null int identity, name varchar(20))

  5. PhpStorm中如何使用database工具

    环境:ubuntu18.4 mysql5.7 一. 打开database 1.选择View—>Tool Windows—>Database单击打开. 2.新增数据连接 选择 “+”—> ...

  6. 洛谷3321 SDOI2015 序列统计

    懒得放传送[大雾 有趣的一道题 前几天刚好听到Creed_神犇讲到相乘转原根变成卷积的形式 看到这道题当然就会做了啊w 对于m很小 我们暴力找原根 如果你不会找原根的话 出门左转百度qwq 找到原根以 ...

  7. jquery自带的排序方法(js也是)

    jquery.sort()   js.sort() <!DOCTYPE html> <html>   <head>     <meta charset=&qu ...

  8. python自动刷新抢火车票

    #!/usr/bin/env python #-*- coding: utf-8 -*- """ 火车票 可以自动填充账号密码,同时,在登录时,也可以修改账号密码 然后手 ...

  9. 黄金含量版本——KTV

    呀,进来的都是盆友,首先先给大家拜年了,祝大家新年快乐,万事如意,家和万事兴~! 大家看了标题进来就不能让大家白进来,一定会让大家带着满满的果实. 下面我们就来讨论讨论KTV这个项目: (1)KTV的 ...

  10. VC++ 创建及调用Dll

    一._stdcall 被这个关键字修饰的函数,其参数都是从右向左通过堆栈传递的(__fastcall 的前面部分由ecx,edx传), 函数调用在返回前要由被调用者清理堆栈. 这个关键字主要见于Mic ...