如何以编程方式填充数据库

时间:2010-04-22 02:07:55

标签: iphone database sqlite

我目前有一个iPhone应用程序,在启动时从外部XML文件读取数据,然后将此数据写入数据库(它只读取/写入用户应用程序以前从未见过的数据)

我担心的是会有几年的数据回溯目录,并且用户第一次运行该应用程序时,必须阅读此内容并且非常缓慢。

我们提出的解决方案是将这些数据“预先构建”包含在应用程序数据库中,这样就不必在首次加载时加载存档数据 - 购买时已经存在于应用程序中。

我的问题是,是否有办法使用来自XML文件等的数据自动填充此数据。数据库在SQLite中。我会用手填充它,但显然这需要很长时间,所以我只是想知道是否有人有更多......程序化的解决方案......

3 个答案:

答案 0 :(得分:1)

不要让杰森回应雷声,我不能发表评论所以它必须在这里。

好消息是您可以直接在Mac上访问模拟器的文件系统。我现在远离我的,或者我可以准确地告诉你在哪里看,但我只是通过将db文件的名称放入探照灯并运行它来找到它。

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

您需要将其复制,因为资源存储在应用程序包的只读签名部分中。

答案 1 :(得分:1)

我要充实杰森的答案,我已将我的帖子标记为社区维基,所以我不应该为此获得任何积分。

他不是在谈论虚拟应用程序 - 像往常一样编写应用程序,但在调用填充plist的代码之前,请检查主数据库中是否存在数据库。您在模拟器中运行它,拉出生成的sqllite数据库,并将其添加到您的项目 - 如果您只需要从中读取它,您可以从主bundle目录中读取它。如果您需要进一步写入,请将其复制到可写文档区域,然后从那里使用它。所以基本上对于主要用户来说,填充数据库的代码永远不会被调用...

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

答案 2 :(得分:0)

我有同样的问题,你使用sqlite,在大量插入它真的很慢。所以它最好的方式是直接提供一个填充的sqlite数据库。

你有另一种方法,而不是INSERT INTO,来填充一个sqlite数据库。您可以为每个表生成一个csv文件,并使用您的计算机和sqlite shell加载到表中:

只需2个简单命令:

.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附加组件。