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


    版权声明:本文为博主原创文章。未经博主同意不得转载。 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




  • 相关阅读:
    Java compiler level does not match the version of the installed Java project facet错误的解决
    java 面试 心得
    Oracle学习——第一章
    Window_Open详解
    在JSP页面获取集合的长度
    java实现文件上传
    Tcp与Ip协议的客户端和服务器编程
    异步委托
    同步委托最简单的一个列子
    使用多线程制作双色球
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10890168.html
  • Copyright © 2020-2023  润新知