我目前有一个iPhone应用程序,在启动时从外部XML文件读取数据,然后将此数据写入数据库(它只读取/写入用户应用程序以前从未见过的数据)
我担心的是会有几年的数据回溯目录,并且用户第一次运行该应用程序时,必须阅读此内容并且非常缓慢。
我们提出的解决方案是将这些数据“预先构建”包含在应用程序数据库中,这样就不必在首次加载时加载存档数据 - 购买时已经存在于应用程序中。
我的问题是,是否有办法使用来自XML文件等的数据自动填充此数据。数据库在SQLite中。我会用手填充它,但显然这需要很长时间,所以我只是想知道是否有人有更多......程序化的解决方案......
答案 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附加组件。