如何通过编程填充数据库

3
我目前有一个iPhone应用程序,在启动时从外部XML文件读取数据,然后将这些数据写入数据库(但它只读取/写入用户应用程序之前没有看过的数据)。我的担忧是,将会有几年的数据备录,第一次运行应用程序时,它将不堪重负地读取这些数据。

我们提出的解决方案是将这些数据“预先构建”到应用程序的数据库中,以便在第一次加载时不必加载归档数据 - 当他们购买应用程序时,这已经在应用程序中了。

我的问题是是否有一种自动填充数据的方法,比如从XML文件或其他文件中获取数据。数据库使用SQLite。我可以手动填充它,但显然这需要很长时间,所以我想知道是否有更多的...编程解决方案...

3
在应用程序中创建数据库时,可以使用相同的方法将初始xml数据呈现为应用程序。然后将刚刚创建的数据文件作为资源添加到项目中。当应用程序启动时,请检查数据目录中是否存在数据文件,如果不存在,则从资源包中复制primer-db文件到数据目录并继续执行。 - Jason Coco
我up了你的评论Jason,但是实际上你应该把它作为一个答案! - Kendall Helmstetter Gelner
嗨,杰森 - 我想我明白你让我做什么了:1.编写“虚拟”应用程序将数据加载到数据库中 2.将“虚拟”应用程序作为资源加载到正确的应用程序中 3.如果数据目录中不存在数据库,则从资源束(“虚拟”应用程序内部的正确应用程序?)复制到数据目录中 4.现在我们应该没问题了...唯一的问题是,我真的不知道如何将一个应用程序中的内容传输到另一个应用程序中?就像模拟器中的数据目录在哪里一样?我只是对你提到的实际操作感到困惑 难为情 - Dwaine Bailey
1
每次构建时,都会在/Users/YOURUSER/Library/Application Support/iPhone Simulator/User/Applications中创建一个新目录。 - willcodejavaforfood
3个回答

1

不想抢杰森的回答,我还不能发表评论,所以只能在这里说。

好处是你可以直接访问模拟器的文件系统,就在你的 Mac 上。我现在离开了我的电脑,否则我可以告诉你具体在哪里找到它,但我只需将 db 文件的名称放入 Spotlight 中进行搜索即可。

你也不需要编写任何代码来填充数据库,因为你可以使用命令行工具进行初始设置,如果更方便的话。

但你需要将它复制过去,因为资源存储在应用程序包的只读签名部分中。


1

我将进一步阐述Jason的答案,我已将我的帖子标记为社区wiki,因此我不应该因此获得任何积分。

他所说的并不是虚拟应用程序 - 按照正常方式编写应用程序,但在调用填充plist的代码之前,请检查主捆绑包中是否存在数据库。您可以在模拟器中运行它,取出生成的sqllite数据库,并将其添加到您的项目中 - 如果您只需要从中读取,则可以从主捆绑目录中读取它。如果您需要进行进一步的写入操作,则将其复制到可写文档区域,并从那里使用它。因此,对于主要用户,永远不会调用填充DB的代码...

唯一的缺点是您还需要包含您正在读取的plist文件,即使您只需要数据库。您可以创建一个不同的构建目标,它是主要构建目标的副本,唯一的区别是它保存了plist文件,而您为应用商店构建的主要目标则没有。


0

我曾经使用sqlite时遇到了和你一样的问题,在大量插入数据时速度非常慢。因此,最好的方法是直接提供一个填充好的sqlite数据库。

除了使用INSERT INTO来填充sqlite数据库之外,还有另一种方法。你可以为每个表生成一个csv文件,并使用计算机和sqlite shell将其加载到表中:

只需要两个简单的命令:

.separator SEPARATOR
.import FILE TABLE 

例子:

adslol:~ user$ sqlite3 
SQLite version 3.6.12
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .separator ;
sqlite> .import myData.csv nameOfMyTable
sqlite> .quit

我希望这是您正在寻找的内容 :)

如果您需要一个好的sqlite3客户端,请尝试SQLite Manager,它是一个Firefox插件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接