如果我使用核心数据,如何用新文件替换sqlite文件?

monwx1rj  于 2023-03-08  发布在  SQLite
关注(0)|答案(1)|浏览(164)

我目前正在开发一款将要使用数据库来存储物品的应用,大家说的第一件事,当谈到在iOS中存储数据时,就是Core Data。
但是,在浏览了几天教程和文档之后,我有一个很大的问题。
让我再解释一下架构。我们有一个后端,你可以在这里添加项目,还有iOS和Android应用程序。我正在为我们的数据库创建一个核心数据模型。我们想要的是检查数据库是否有更新并下载它。问题是我们没有使用JSON或XML,我们使用的是新的sqlite文件。
由于Core data为数据库创建了三个文件,分别是:

  • db.sqlite
  • db.sqlite-wal
  • db.sqlite-shm

核心数据是否可以用从服务器下载的新数据替换"db.sqlite"?

a64a0gku

a64a0gku1#

虽然替换数据库文件而不是导入对象的想法非常诱人,但非常不鼓励使用CoreData创建的sqlite数据库。您永远不应该手动触摸它,当您这样做时,您很可能会以损坏的DB或混乱的数据结束。所以不,CoreDate不能替换底层sqlite文件。您应该使用CoreData堆栈导入数据,这就是它的设计方法,创建JSON/XML服务是最好的方法。
但是理论上如果你能够保持存储在数据库中的CD内部信息不变,那么替换sqlite文件应该是可能的。如果你的数据库对用户来说是只读的,那么它可能*工作,但是如果用户能够创建或修改记录,那么现在就忘掉它吧。
首先,在替换它、替换文件并重新创建CoreData堆栈之前,必须拆除可能正在使用它的所有CoreData堆栈(托管对象上下文、持久存储协调器、托管对象模型)。
sqlite是主数据库文件,另外两个是临时文件,即writeahead log(wal)和Shared memory(smh),所以不需要这两个文件。
记住你永远不要
绝对不要
改变数据库的结构,只改变其中的数据!
然而,正如开头所述,我
根本不*推荐这种方法。

相关问题