Android:如果失败则重新运行数据库 onCreate()
Android: Rerun Database onCreate() if it fails
由于一些错误的决定,我的 SQLiteOpenHelper
class 中的 onCreate()
卡住了,最多可以 运行 5 分钟。用户可以在此过程中关闭他的 phone,或强行关闭应用程序,这意味着我的 onCreate() 将被提前取消。如果是这样的话——我需要擦除数据库并onCreate()
重新运行。我该怎么做?
只需在 onCreate()
中创建表并在另一个 Service
或后台线程中初始化数据。
在该后台线程中,在初始化数据之前对 SQLiteDatabase
对象调用 beginTransaction()
。然后在完成后调用 setTransactionSuccessful()
和 endTransaction()
。
在 SharedPreferences
中保留一个标志,以便您可以检查此初始化是否已经发生
您应该使用交易。如果你完成它(当这个过程完成时),所有的数据都会被写入数据库。
否则,他们不会。
如果你不知道什么是交易,这里有一个关于交易的教程:http://www.tutorialspoint.com/sqlite/sqlite_transactions.htm
简而言之,一个事务可以让你一次写入所有数据;如果开始的事务没有完成,则不会写入数据。
因此,如果发生任何错误或您的用户强行关闭,交易将不会完成,也不会写入任何数据。
由于一些错误的决定,我的 SQLiteOpenHelper
class 中的 onCreate()
卡住了,最多可以 运行 5 分钟。用户可以在此过程中关闭他的 phone,或强行关闭应用程序,这意味着我的 onCreate() 将被提前取消。如果是这样的话——我需要擦除数据库并onCreate()
重新运行。我该怎么做?
只需在 onCreate()
中创建表并在另一个 Service
或后台线程中初始化数据。
在该后台线程中,在初始化数据之前对 SQLiteDatabase
对象调用 beginTransaction()
。然后在完成后调用 setTransactionSuccessful()
和 endTransaction()
。
在 SharedPreferences
中保留一个标志,以便您可以检查此初始化是否已经发生
您应该使用交易。如果你完成它(当这个过程完成时),所有的数据都会被写入数据库。
否则,他们不会。
如果你不知道什么是交易,这里有一个关于交易的教程:http://www.tutorialspoint.com/sqlite/sqlite_transactions.htm
简而言之,一个事务可以让你一次写入所有数据;如果开始的事务没有完成,则不会写入数据。
因此,如果发生任何错误或您的用户强行关闭,交易将不会完成,也不会写入任何数据。