2010-04-22 81 views
3

目前,我有一个iPhone应用程序,从启动时的外部XML文件中读取数据,然后将此数据写入到数据库(它仅读/写用户的应用还没有看到数据之前,虽然)如何以编程方式填充数据库

我担心的是将有一个数据的数年后的目录,并且第一次用户运行该应用程序时,它将不得不阅读此内容并且速度非常慢。

我们建议的解决方案是将这些数据“预构建”包含到应用程序数据库中,以便它不必在首次装载时载入归档数据 - 这些数据在购买时已经在应用程序中。

我的问题是,是否有一种方法可以自动填充,比如说,从XML文件或数据的东西这个数据。数据库在SQLite中。我会手工填充它,但显然这将需要很长时间,所以我只是想知道是否有人有更多...编程解决方案...

+3

只需使用您在应用程序中用于创建数据库的任何内容即可将初始xml数据呈现到应用程序中。然后将刚刚创建的数据文件作为资源添加到项目中。当应用程序启动时,检查数据文件是否在数据目录中,如果没有,请将primer-db文件从资源包复制到数据目录并继续。 – 2010-04-22 02:16:18

+0

我提高了你的评论杰森,但你真的应该把它作为答案! – 2010-04-22 02:17:11

+0

嗨贾森 - 我想我明白你告诉我要做什么: 1.编写“虚拟”应用程序将数据加载到数据库中 2.将“虚拟”应用程序加载到适当的应用程序中作为资源 3.如果数据库不存在在数据目录中,从资源包(“虚拟”应用程序,内部正确的应用程序?)复制到数据目录 4.我们现在应该很好去... 唯一的是,我真的不知道如何从一个应用程序到另一个应用程序?比如,模拟器的数据目录在哪里?我很困惑如何真正*做*你提到的东西都是*耻辱* – 2010-04-22 02:25:58

回答

1

我要充实贾森的回答,我已经打上我的文章作为一个社区维基所以我不应该得到任何点这个。

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

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

1

不要采取杰森的回答雷,我不能评论,所以它必须在这里。

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

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

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

0

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

你有另一种方式,而不是INSERT INTO,来填充sqlite数据库。您可以生成CSV文件为每个表,并使用您的计算机和sqlite的外壳装入表:

仅有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插件。

相关问题