我非常疯狂,在Android开发方面很陌生并且遇到了麻烦。正如我之前的帖子所暗示的那样,我有一个包含12个数据表的116KB SQLite数据库。
我不想从应用程序写入数据库。我只想提取数据并引用它。我想拉取数据并将其放入TextView或ListView。
我所研究的是需要将数据从资产复制到内部设备数据。我已经看过很多页面的复制代码供参考。我used this answer并将代码复制到一个类中以尝试复制数据库。
我和他以及其他几个人分享了同样的问题:
如果我只提取数据,是否需要使用OnCreate或OnUpdate? (我不需要创建新表或更新它们。)
如何验证我的数据库是否已复制到内部存储器?
谢谢!
答案 0 :(得分:0)
如果我只提取数据,是否需要使用OnCreate或OnUpdate? (我不需要创建新表或更新它们。)
如果使用这样的子类(通常称为数据库助手),您只需要编写SQLiteOpenHelper子类的onCreate
和onUpgrade
方法。您不需要拥有这样的子类,因为您可以在没有的情况下打开数据库。
如果您确实使用了这样的子类,那么只有在数据库不存在且尝试打开数据库时(例如,调用getWritableDatabase或getReadableDatabase时)才会调用onCreate
方法)。因此,如果您使用复制到适当位置的外部数据库,则不会调用onCreate
,因此该方法可能为空,但仍必须覆盖该方法。
onCreate
时,数据库本身实际上已经创建但没有表(实际上不是真的,因为它将有一个名为sqlite_master的表,还有一个名为android_metadata的表)。 再次,如果你使用这样的子类,那么只有传递给构造函数的super方法的版本号大于数据库的 user_version 时,才会调用onUpgrade
方法(如存储在偏移60)。同样,此方法可以为空,但必须重叠。
onDowngrade
与onUpgrade
相反,因为如果传递给super方法的版本号小于数据库的 user_version ,则会调用它。但是,不需要重写此方法,但如果在不重写的情况下调用它,则会抛出SQLIteException。
如何验证我的数据库已复制到我的内部 存储器?
您可以通过多种方式检查数据库是否已被复制。
您可以通过尝试查看文件是否存在来进行验证(不检查数据库实际上是否是有效的数据库)。
检查文件是否存在,然后读取前16个字节以确保它们是 SQLite格式3 \ 000 (如果它很可能是一个有效的sqlite数据库)。 Database File Format
尝试使用SQLiteDatabase方法之一(显然不是openOrCreateDatabase)打开数据库。
打开数据库,然后使用query从sqlite_master表中提取表。
如您所见,上述方法会逐步检查更多信息。您可能还希望使用实用程序here