【发布时间】:2014-11-25 10:54:18
【问题描述】:
在我的数据库处理程序类(扩展 SQLiteOpenHelper)中,我有 onCreate() 方法:
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_TASKS);
db.execSQL(CREATE_TABLE_CONTACTS);
}
有时(很少,但仍然)这会导致崩溃,因为显然第一个表已经存在。显然我可以(并且确实)在语句中添加IF NOT EXISTS 来解决这个问题,但我想知道的是如果表已经存在,onCreate() 将在什么情况下运行。这通常不应该发生,所以我可能搞砸了,但我不知道是什么。
【问题讨论】:
-
我已经和
SQLiteOpenHelper合作了快 3 年了,我从未见过这个错误... -
我偶尔也会遇到一些 SQLiteDatabaseLockedExceptions,因为我有一堆数据库处理程序类实例在做一些事情,有时是同时做的。这会导致错误吗?如果是这样,那么当我修复数据库锁定问题时,这也可能会消失。
-
哦,如果你有其他线程在数据库上做事,那么是的,这是正常的。另一个线程已经创建了这个表。我建议您在创建数据库之前不要产生其他线程。
-
是的,其他线程同时在做事。是否可以通过对数据库处理程序类使用单例模式来解决此问题?
-
如果您在应用程序未卸载的位置创建表,例如您在 /sdcard/myapp/data 创建表,然后重新安装应用程序,这可能会发生。无论如何,如果不存在则创建是数据库的最佳实践。您可能只是在修复损坏的安装习惯。
标签: android sqlite sqliteopenhelper