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

Iphone 如何以编程方式填充数据库,iphone,database,sqlite,Iphone,Database,Sqlite,我目前有一个iPhone应用程序,它在启动时从外部XML文件读取数据,然后将这些数据写入数据库(但它只读取/写入用户应用程序以前从未见过的数据) 我担心的是,将会有一个数年的数据备份目录,用户第一次运行应用程序时,它将不得不读取这些数据,而且速度非常慢 我们建议的解决方案是将这些数据“预构建”到应用程序数据库中,这样就不必在第一次加载时加载到存档数据中——在他们购买应用程序时,存档数据已经在应用程序中了 我的问题是,是否有一种方法可以用来自(比如)XML文件或其他文件的数据自动填充这些数据。数据

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

我担心的是,将会有一个数年的数据备份目录,用户第一次运行应用程序时,它将不得不读取这些数据,而且速度非常慢

我们建议的解决方案是将这些数据“预构建”到应用程序数据库中,这样就不必在第一次加载时加载到存档数据中——在他们购买应用程序时,存档数据已经在应用程序中了


我的问题是,是否有一种方法可以用来自(比如)XML文件或其他文件的数据自动填充这些数据。数据库在SQLite中。我会手动填充它,但显然这需要很长时间,所以我只是想知道是否有人有一个更…程序化的解决方案…

不要接受Jason的回答,我还不能评论,所以它必须在这里

好在你可以在你的Mac上访问模拟器的文件系统。我现在不在家,或者我可以告诉你确切的位置,但我只是把数据库文件的名称放进探照灯,然后运行它来找到它

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


由于资源存储在应用程序包的只读签名部分,因此您需要复制它

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

您有另一种方法来填充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客户端,试试看,它是Firefox插件。

我将充实Jason的答案,我已经将我的帖子标记为社区wiki,所以我不应该因此得到任何分数

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


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

只需使用您在应用程序中创建数据库时使用的任何工具,即可将初始xml数据呈现到应用程序中。然后将刚刚创建的数据文件作为资源添加到项目中。当应用程序启动时,检查数据文件是否在数据目录中,如果不在,请将primer db文件从资源包复制到数据目录并继续。我对你的评论进行了投票,Jason,但你真的应该将其作为答案!嗨,杰森-我想我明白你要我做什么:1。编写“虚拟”应用程序将数据加载到数据库2中。将“虚拟”应用程序作为资源3加载到适当的应用程序中。如果数据目录中不存在数据库,请从资源包(属于“虚拟”应用程序,在适当的应用程序中?)复制到数据目录4中。我们现在应该可以走了。。。唯一的问题是,我真的不知道如何从一个应用程序到另一个?比如,模拟器的数据目录在哪里?我对如何实际执行您提到的操作感到困惑,每次在/Users/YOURUSER/Library/Application Support/iPhone Simulator/User/Applications中创建新目录时,都会感到羞愧