Я также встречал ошибку sqlite "no such table" на Android 9.0, я обнаружил, что есть аналогичная проблема на SO. ( Android P - «SQLite: Нет такой ошибки таблицы» после копирования базы данных из ресурсов ).
Основываясь на вышеуказанной ссылке, я попробовал следующие решения 1 и 2.
1) Закрыть соединение после прочтения
private void createDataBase() throws IOException {
this.getReadableDatabase();
this.close();
try {
copyDataBase();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
2) Отключить WAL.
@Override
public void onConfigure(SQLiteDatabase db) {
Logger.i(TAG, "onConfigure()");
super.onConfigure(db);
db.disableWriteAheadLogging();
}
private boolean checkIfDBExists() {
File dbFile = new File(DB_PATH + DB_NAME);
return dbFile.exists();
}
public void openDataBase() throws SQLException {
String myPath = DB_PATH + DB_NAME;
myDataBase = SQLiteDatabase.openDatabase(myPath, null,SQLiteDatabase.OPEN_READWRITE);
}
После этого я обнаружил проблему. Эти решения хороши только тогда, когда я удаляю установленное приложение и заново устанавливаю приложение.
Когда я установил приложение с ошибкой с "no such table error"
на устройстве Android 9.0 , я добавляю исправленный выше код и устанавливаю его непосредственно в Android Studio, которая выглядит как приложение upgrade сценарий.
В этом случае файл БД будет там, checkIfDBExists()
вернет истину, затем мы будем называть openDataBase()
вместо createDataBase()
Все равно будет sqlite "no such table" error
, так как я могу полностью решить эту проблему независимо от новой установки или обновления? Заранее спасибо.