• FMDB(数据库)与Model(数据模型)的结合使用(CRUD)


    一. 声明

      本文意在探讨, 也参考了几位大神的文章, 在文章最后我会把链接贴出来, 如果有叙述错误的地方, 请大神们指正!

    二. 前言

      最近在做项目的时候, 我们有一个"我的消息"模块, 是这样设计的, 在本地创建一个数据库, 收到远程推送的消息, 将该条消息存入数据库, 进入"我的消息"页面, 读取数据库中的内容, 展示到该页面, 我们是用的FMDB来进行数据库的CRUD, 每一条消息为一个Model, 根据模型的属性列表来创建数据库的表, 以model为一个单位来进行数据库的添加, 删除, 更新, 查找. 自己也写了一个Demo来演示本节要讨论的内容.

    上Demo: 联系人列表, 添加联系人, 删除联系人, 搜索联系人, 更新联系人信息

    演示视频地址: http://v.youku.com/v_show/id_XMzkxMTA5NDg1Ng==.html?spm=a2h3j.8428770.3416059.1

    Demo地址: https://github.com/RayLeeBoy/LCLFMDBModel

    三. 正文

    1. 读取数据库中的数据

        // 创建数据库
        [[LCLDataManager shareManager] createDatabaseWithName:@"user"];
        
        // 打开数据库
        [[LCLDataManager shareManager] openDatabase];
        
        // 根据传入的数据模型来创建表
        [[LCLDataManager shareManager] createTableWithName:@"t_contacts" class:[LCLPerson class]];
        
        // 从数据库中读取数据
        NSMutableArray * mArr = [[LCLDataManager shareManager] queryWithTableName:@"t_contacts"];
        
        // 赋给数据源
        self.dataSource = mArr;
        
        // 更新UI
        [self.tableView reloadData];
        
        // 关闭数据库
        [[LCLDataManager shareManager] closeDatabase];

    2. 向数据库中添加数据

            // 数据库: 添加数据
            // 创建一条数据
            NSDate * date = [NSDate date];
            NSTimeInterval timeInterval = [date timeIntervalSince1970];
            NSString * userId = [NSString stringWithFormat:@"%.f", timeInterval];
            LCLPerson * person = [LCLPerson new];
            person.userId = userId;
            person.name = @"Ray";
            person.age = @"18";
            person.phone = @"18617673256";
            person.hobby = @"sing song";
            
            // 获取数据库
            [[LCLDataManager shareManager] createDatabaseWithName:@"user"];
            
            // 打开数据库
            [[LCLDataManager shareManager] openDatabase];
            
            // 获取表
            [[LCLDataManager shareManager] createTableWithName:@"t_contacts" class:[LCLPerson class]];
            
            // 向数据库写入数据
            [[LCLDataManager shareManager] insertWithTableName:@"t_contacts" model:person];
            
            // 关闭数据库
            [[LCLDataManager shareManager] closeDatabase];

    3. 编辑已经存在的数据

            // 数据库: 更新数据
            // 这个person指的是已经从数据库中读取的数据
            LCLPerson * person = nil;
            
            // 更改某个属性值
            person.age = @"20";
            
            // 获取数据库
            [[LCLDataManager shareManager] createDatabaseWithName:@"user"];
            
            // 打开数据库
            [[LCLDataManager shareManager] openDatabase];
            
            // 获取表
            [[LCLDataManager shareManager] createTableWithName:@"t_contacts" class:[LCLPerson class]];
            
            // 更新数据 primaryKey: 表里的字段名, primaryValue: 字段对应的值
            [[LCLDataManager shareManager] updateWithTableName:@"t_contacts" model:person primaryKey:@"userId" primaryValue:person.userId];
            
            // 关闭数据库
            [[LCLDataManager shareManager] closeDatabase];    

    4. 从数据库中查找数据

        // 数据库: 搜索数据
        // 获取数据库
        [[LCLDataManager shareManager] createDatabaseWithName:@"user"];
        
        // 打开数据库
        [[LCLDataManager shareManager] openDatabase];
        
        // 获取表
        [[LCLDataManager shareManager] createTableWithName:@"t_contacts" class:[LCLPerson class]];
        
        // 从数据库中查找数据, key: 表中的字段名, value: 字段对应的值
        NSMutableArray * mArr = [[LCLDataManager shareManager] queryWithTableName:@"t_contacts" key:@"phone" value:self.searchTextField.text];
        
        // 赋给数据源
        self.dataSource = mArr;
        
        // 更新UI
        [self.tableView reloadData];
        
        // 关闭数据库
        [[LCLDataManager shareManager] closeDatabase];

    5. 从数据库中删除数据

            // 数据库: 删除数据
            // 获取数据库
            [[LCLDataManager shareManager] createDatabaseWithName:@"user"];
    
            // 打开数据库
            [[LCLDataManager shareManager] openDatabase];
    
            // 要删除的数据
            LCLPerson * person = self.dataSource[indexPath.row];
            
            // 从数据库中把这条数据删除, key: 表中的字段, value: 字段对应的值
            [[LCLDataManager shareManager] removeWithTableName:@"t_contacts" key:@"userId" value:person.userId];
    
            // 关闭数据库
            [[LCLDataManager shareManager] closeDatabase];
    
            // 更新数据源
            [self.dataSource removeObjectAtIndex:indexPath.row];
            
            // 更新UI
            [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];

    四. 参考文章

      1. FMDB使用方法

      2. iOS-FMDB数据库之增删改查使用

    五. 总结

      Demo演示放在了youku, Demo代码放在了github, 大家可以下载看完整的代码及实现逻辑, 有不足的地方, 或者大家有更好的想法, 欢迎来此讨论!

    Talk is cheap. Show me the code.

     

  • 相关阅读:
    Windows Azure: Service Bus Queues 入门
    HTTP权威指南读书
    学习OpenWebkitSharp
    Intro to ASP.NET MVC 4 with Visual Studio [译五:添加一个模型]
    正则表达式
    运行page页面时的事件执行顺序
    C#cookie自动获取工具发布
    (译) Facebook工程师2012年小创意合集
    三层+临时表存储过程+巧用json+贱招图片加载+无刷新分页
    iOS开发那些事编写OCUnit测试方法应用测试方法
  • 原文地址:https://www.cnblogs.com/ZeroHour/p/9934309.html
Copyright © 2020-2023  润新知