我正在尝试创建一个包含 12 个不同表的数据库,该数据库直到今天都运行良好。现在,每次我在卸载并重新安装它(或只是清除应用程序数据)后第一次启动我的应用程序时,我都会收到标题中看到的错误消息。但是,在收到此错误后第二次启动应用程序时,它工作正常。
下面的代码来自我的DatabaseHelper类,它或多或少与android记事本教程相同。
在我的活动中打开数据库并尝试进行第一个查询后,出现此错误。
对于可能导致此问题的原因以及如何解决有什么建议吗?
private static class DatabaseHelper extends SQLiteOpenHelper {
private static String DB_PATH = "/data/data/my_app/databases/";
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
if (!checkDataBase()) {
db.execSQL(TABLE_1);
db.execSQL(TABLE_2);
db.execSQL(TABLE_3);
db.execSQL(TABLE_4);
db.execSQL(TABLE_5);
db.execSQL(TABLE_6);
db.execSQL(TABLE_7);
db.execSQL(TABLE_8);
db.execSQL(TABLE_9);
db.execSQL(TABLE_10);
db.execSQL(TABLE_11);
db.execSQL(TABLE_12);
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + TABLE_1);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_2);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_3);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_4);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_5);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_6);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_7);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_8);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_9);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_10);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_11);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_12);
onCreate(db);
}
private boolean checkDataBase() {
SQLiteDatabase checkDB = null;
try {
checkDB = SQLiteDatabase.openDatabase(DB_PATH + DATABASE_NAME, null, SQLiteDatabase.OPEN_READONLY);
checkDB.close();
} catch (SQLiteException e) {
}
return checkDB != null ? true : false;
}
}
问题是您的数据库可能不包含 Android 相关的元数据。
您需要使用SQLiteDatabase.NO_LOCALIZED_COLLATORS
呼叫时标记SQLiteDatabase.openDatabase()
- 这不再导致问题。至少它对我有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)