FMDB使用的一点心得:数据库创建、制表、查询等以及image转换成二进制nsdata保存到数据库中

<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

时间: 2024-10-27 05:35:23

FMDB使用的一点心得:数据库创建、制表、查询等以及image转换成二进制nsdata保存到数据库中的相关文章

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

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

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

System.InvalidOperationException: 支持"XXX"上下文的模型已在数据库创建后发生更改.请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269). EF发布时遇到的问题(数据库初始化 http://www.cr173.com/html/17941_1.html) public ZujuanWebSiteDataEntities() : base("cloud_

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

在用VS进行MVC开发的过程中遇到如下问题: 支持“***Context”上下文的模型已在数据库创建后发生更改.请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269). 解决了,把数据库中检测模型变化的表(如上图所示)删除就可以了

&quot;支持“xxx”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库”解决办法

学习Asp.Net MVC4 时,使用EF.本来正常,但是由于修改了一下Model中的一个实体类. 导致这个错误. “支持“xxx”上下文的模型已在数据库创建后发生更改.请考虑使用 Code First 迁移更新数据库”. 为了解决上述错误,在Global.asax文件中在 Application_Start后添加以下语句: Database.SetInitializer(new DropCreateDatabaseIfModelChanges<SalesERPDAL>()); 注意需引入命名

42.QT-QSqlQuery类操作SQLite数据库(创建、查询、删除、修改)详解

Qt 提供了 QtSql 模块来提供平台独立的基于 SQL 的数据库操作.这里我们所说的“平台 独立”,既包括操作系统平台,也包括各个数据库平台,Qt支持以下几种数据库: QT自带SQLITE数据库,不需要再安装 QTDS在Qt4.7起已经被移除 1.QtSql 要使用QtSql 模块的话,需要在.pro文件中添加这么一句: QT += sql  2.QSqlDatabase QSqlDatabase类提供了一个接口,用于通过连接访问数据.QSqlDatabase的一个实例表示连接.该连接通过受

3.MySQL数据库创建、查询、删除

1.查询数据库 查看有哪些数据库: 1 SHOW DATABASES; information_schema:数据字典 mysql:控制和管理信息 performance_schema:性能字典 sys:系统数据库 查看数据库信息: SHOW CREATE DATABASE 数据库名称; 1 SHOW CREATE DATABASE sys; 以上输出结果显示了创建MySQL数据库的SQL语句,以及数据库的默认字符集. 2.创建数据库 语法: CREATE DATABASE 数据库名称 [库选项

二进制数据将图片保存到数据库,并读取数据库二进制数据显示图片

一. 浏览图片 OpenFileDialog ofd = new OpenFileDialog();            ofd.InitialDirectory = @"E:\";            ofd.Filter = "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files(*.*)|*.*";            ofd.RestoreDirectory = true; if (ofd

8天掌握EF的Code First开发系列之3 管理数据库创建,填充种子数据以及LINQ操作详解

本篇目录 管理数据库创建 管理数据库连接 管理数据库初始化 填充种子数据 LINQ to Entities详解 什么是LINQ to Entities 使用LINQ to Entities操作实体 LINQ操作 懒加载和预加载 插入数据 更新数据 删除数据 本章小结 本人的实验环境是VS 2013 Update 5,windows 10,MSSQL Server 2008. 上一篇<Code First开发系列之领域建模和管理实体关系>,我们主要介绍了EF中“约定大于配置”的概念,如何创建数据

Entity Framework应用:使用Code First模式管理数据库创建和填充种子数据

一.管理数据库连接 1.使用配置文件管理连接之约定 在数据库上下文类中,如果我们只继承了无参数的DbContext,并且在配置文件中创建了和数据库上下文类同名的连接字符串,那么EF会使用该连接字符串自动计算出数据库的位置和数据库名.比如,我们的数据库上下文定义如下: 1 using System; 2 using System.Collections.Generic; 3 using System.Data.Entity; 4 using System.Linq; 5 using System.