使 sqlite 文件在程序运行之间保持存在

Posted

技术标签:

【中文标题】使 sqlite 文件在程序运行之间保持存在【英文标题】:Making a sqlite file stay existent between runs of the program 【发布时间】:2010-04-24 02:31:40 【问题描述】:

我在使用 Xcode 中的 iPhone 程序的一些 sqlite 代码时遇到问题。我是这样打开我的数据库的:

int 结果 = sqlite3_open("stealtown.db", &database);

当我键入程序时,他们在我正在看的一本书中是这样写的。但是,这种打开数据库的方式仅在您在模拟器中运行时才有效,而不是在设备上。所以我终于知道我需要这样做:

NSString *file = [[NSBundle mainBundle] pathForResource:@"stealtown" ofType:@"db"]; int result = sqlite3_open([文件 UTF8String], &database);

这可以在设备上使用,除了一件事:每次启动程序时,它都会像您从未创建过数据库一样开始,并且当您在表中添加一个条目时,它是该表中的唯一条目。

当我在模拟器上使用第一个代码时,我可以打开我的程序 6 次,每次向表中添加 1 个条目,最后,我在该表中有 6 个条目。使用第二个代码,我做完全相同的事情,但每次该表中只有 1 个条目。我解释这个好吗,我希望如此,有时对我来说很难。

有人知道为什么会这样吗?

【问题讨论】:

【参考方案1】:

在设备上,应用程序包不可写。因此,您的数据库文件无法更改。您必须在首次启动时在应用程序的 Documents 目录中创建数据库。或者,如果您的应用带有预填充数据,您必须先将数据库文件从应用包复制到 Documents 目录,然后再打开副本。

【讨论】:

以上是关于使 sqlite 文件在程序运行之间保持存在的主要内容,如果未能解决你的问题,请参考以下文章

谷歌云运行、Django 和 sqlite

在程序运行之间保持变量值

如何在 sqlite 核心数据文件之间正确切换?

使弹簧靴和角度应用程序之间的模型保持同步。备择方案?

OSX:在哪里存储应用程序的 SQLite 文件?

JFrame 使应用程序在关闭后仍保持运行