2014-01-30 74 views

回答

2

资产文件夹是只读的,所以如果您需要编辑数据库,那么它将不适用于yourapp。如果您有预填充的数据库,则可以选择一种方法,即将资产文件夹复制到首次访问应用程序时可写入的某个位置,然后继续使用可写入的版本。

0

假设您的数据库已正确配置,没有性能差异。看到这一点:

http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

我使用这个程序后,我不得不经常做的相当复杂的和实质性的查询了〜500MB的数据库,这是我的邮政编码为分布和解压上,由于第一次运行大小,这完美无瑕。

+1

来自该博客文章的代码是旧的,讨厌的和有缺陷的。 'SQLiteAssetHelper'将是新的发展更好的选择:https://github.com/jgilfelt/android-sqlite-asset-helper – CommonsWare

+0

你能否具体讲破绽?我很欣赏链接... –

+1

它硬编码数据库文件的路径,在某些情况下会出错(例如,Android 4.2+平板电脑上的辅助帐户)。使用'getDatabasePath()'。由于Android为了压缩目的而将文件处理的方式存在一些奇怪之处,所以它会遇到大型数据库的问题,这就是为什么'SQLiteAssetHelper'需要一个ZIP文件。它不会同步()磁盘写入。并且它从SQLiteOpenHelper继承,但没有正确支持'SQLiteOpenHelper'(例如,多余的'openDataBase()',而不是使用'getReadableDatabase()'和kin)。可能还有更多,但这些都是首发。 – CommonsWare

4

使用外部数据库文件(来自资产)和使用SQLiteOpenHelper创建新数据库有什么区别?

您不能直接使用预先打包在应用程序中的数据库作为资产。 SQLite需要一个文件;资产不是文件,而是构成APK的ZIP文件中的条目。

使用something like SQLiteAssetHelper,您可以将预打包数据库作为用户的起点,方法是将资产数据库从资产复制到应用程序的内部存储中。

将从资产访问数据库减慢我的应用程序。

这取决于您将其与之进行比较,即使这样,差异也只会是您第一次尝试使用数据库。

使用数据库打包为资产的方法,数据库需要在资产使用前从资产中复制。这需要时间。它不应该比创建一个空数据库并执行SQL语句来填充它慢得多。事实上,我预计在很多情况下它会更快。但是,它会比从空的数据库开始慢。

一旦数据库中创建和设置 - 无论是通过你自己的CREATE TABLE陈述或通过复制资产初始数据库 - 性能将是相同的,因为数据库本身是相同的。