从0开始弄一个面向OC数据库(四)

稀土 2017-12-21

前言

在前面的三个阶段,我们分别实现的功能:

  • 1、创建、打开、关闭数据库、通过runtime获取成员变量实现建对应数据库表的功能。从0开始弄一个面向OC数据库(一)
  • 2、向数据库保存或者更新一个模型(数据)、查询数据库数据。从0开始弄一个面向OC数据库(二)
  • 3、删除数据库数据、数据库升级(更新)、数据迁移、字段改名。从0开始弄一个面向OC数据库(三)

总之: 我们实现了面向模型的数据库增删查改,以及数据库升级。感觉功能实现得差不多了,但是如果存得模型得成员变量里面包含了另外得模型或者数组、字典,那么我们就没法存了。我们要解决他,这就是本篇要做的。

从0开始弄一个面向OC数据库(四)

本篇我们要实现:复杂数据类型的存储,比如自定义对象、数组、字典等......然后我们还要实现模型嵌套模型,数组、字典嵌套模型以及各种相互嵌套的情况。 本篇思路有点绕,需要沉着冷静并且实践才行。先看一下我们最终实现的结果,我们向数据库内存储一个非常复杂的模型:

从0开始弄一个面向OC数据库(四)插入数据库是成功的,但是插入成功不重要,重要的是,你取出来的时候,他是不是插入之前的样子,下面我们进行数据库查询,得到以下结果:从0开始弄一个面向OC数据库(四)从得到的结果来看,各种类型嵌套的模型,我们能过完美的插入数据库,同时,我们也能完美将它从数据库取出来并且还原为模型,灰常的牛逼。这个一定是我们比FMDB,Realm这种航母级别的优势所在。你是不是迫不及待的想知道这是如何实现的?下面会一一讲解。

功能实现

在实现功能之前,我们一定要先考虑一下实现方式,考虑好了再开始动手,先看一下前辈们是如何做的,看过之后我们总结出两个方式:

  • 一种是将不管三七二十一通通转成NSData,转不了的就归档转!然后存,取数据的时候就解档取。
  • 另外就是通通转成字符串,有一些可以直接转成JSON字符串,不能直接转的通过一定的规律转成字符串,取的时候转回去就取就好了。

最终我们使用第二种方式。接下来,我们逐条实现对应的功能,过程会比较绕逻辑,讲得不太明白的建议直接看代码,反正是绕了我挺久的

相关推荐