【问题标题】:Android: Rerun Database onCreate() if it failsAndroid:如果失败,则重新运行数据库 onCreate()
【发布时间】:2015-04-30 15:01:34
【问题描述】:

由于一些糟糕的决定,我在SQLiteOpenHelper 课程中遇到了一个onCreate(),该课程最多可以运行 5 分钟。用户可以在此过程中关闭手机或强制关闭应用程序,这意味着我的 onCreate() 将被提前取消。如果是这种情况 - 我需要擦除数据库并重新运行onCreate()。我该怎么做?

【问题讨论】:

  • 你在做什么导致它最多需要 5 分钟?你也在初始化数据吗?
  • 根据 assets 文件夹中的文件初始化数据库。

标签: android android-sqlite sqliteopenhelper android-database


【解决方案1】:

只需在onCreate() 中创建表,然后在另一个Service 或后台线程中初始化数据。

在该后台线程中,在初始化数据之前,在您的 SQLiteDatabase 对象上调用 beginTransaction()。然后在完成后调用setTransactionSuccessful()endTransaction()。 在SharedPreferences 中保留一个标志,以便您检查此初始化是否已经发生

【讨论】:

    【解决方案2】:

    您应该使用事务。如果您完成它(当该过程完成时),所有数据都将写入数据库。
    否则,他们不会。

    如果你不知道什么是事务,这里有一个关于事务的教程:http://www.tutorialspoint.com/sqlite/sqlite_transactions.htm

    简而言之,事务允许您一次写入所有数据;如果已开始的事务没有最终确定,则不会写入数据。

    因此,如果发生任何错误或您的用户强制关闭,交易将不会完成,也不会写入任何数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-12
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多