如何验证我是否将资产数据从资产复制到设备内存?

时间:2018-03-16 16:54:26

标签: android database sqlite

我非常疯狂,在Android开发方面很陌生并且遇到了麻烦。正如我之前的帖子所暗示的那样,我有一个包含12个数据表的116KB SQLite数据库。

我不想从应用程序写入数据库。我只想提取数据并引用它。我想拉取数据并将其放入TextView或ListView。

我所研究的是需要将数据从资产复制到内部设备数据。我已经看过很多页面的复制代码供参考。我used this answer并将代码复制到一个类中以尝试复制数据库。

我和他以及其他几个人分享了同样的问题:

  1. 如果我只提取数据,是否需要使用OnCreate或OnUpdate? (我不需要创建新表或更新它们。)

  2. 如何验证我的数据库是否已复制到内部存储器?

  3. 谢谢!

1 个答案:

答案 0 :(得分:0)

  

如果我只提取数据,是否需要使用OnCreate或OnUpdate? (我不需要创建新表或更新它们。)

如果使用这样的子类(通常称为数据库助手),您只需要编写SQLiteOpenHelper子类的onCreateonUpgrade方法。您不需要拥有这样的子类,因为您可以在没有的情况下打开数据库。

  • 如果您确实使用了这样的子类,那么只有在数据库不存在且尝试打开数据库时(例如,调用getWritableDatabase或getReadableDatabase时)才会调用onCreate方法)。因此,如果您使用复制到适当位置的外部数据库,则不会调用onCreate,因此该方法可能为空,但仍必须覆盖该方法。

    • 请注意,当调用onCreate时,数据库本身实际上已经创建但没有表(实际上不是真的,因为它将有一个名为sqlite_master的表,还有一个名为android_metadata的表)。
  • 再次,如果你使用这样的子类,那么只有传递给构造函数的super方法的版本号大于数据库的 user_version 时,才会调用onUpgrade方法(如存储在偏移60)。同样,此方法可以为空,但必须重叠。

  • onDowngradeonUpgrade相反,因为如果传递给super方法的版本号小于数据库的 user_version ,则会调用它。但是,不需要重写此方法,但如果在不重写的情况下调用它,则会抛出SQLIteException。

  

如何验证我的数据库已复制到我的内部   存储器?

您可以通过多种方式检查数据库是否已被复制。

您可以通过尝试查看文件是否存在来进行验证(不检查数据库实际上是否是有效的数据库)。

检查文件是否存在,然后读取前16个字节以确保它们是 SQLite格式3 \ 000 (如果它很可能是一个有效的sqlite数据库)。 Database File Format

尝试使用SQLiteDatabase方法之一(显然不是openOrCreateDatabase)打开数据库。

打开数据库,然后使用query从sqlite_master表中提取表。

如您所见,上述方法会逐步检查更多信息。您可能还希望使用实用程序here