我曾使用checkDataBase函数来确保数据库已经存在,以避免在Oreo中每次打开应用程序时重新复制文件。但在Android Pie中,它不起作用。
private boolean checkDataBase (String dbName, int dbVersion) {
SQLiteDatabase checkDB = null;
try {
String myPath = DB_PATH + dbName;
checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.CONFLICT_ABORT);
if (checkDB.getVersion() < dbVersion) {
Timber.d("Delete database called");
myContext.deleteDatabase(dbName);
return false;
}
} catch(SQLiteException e) {
}
if(checkDB != null){
checkDB.close();
}
return checkDB != null;
}
遇到这个错误:os_unix.c:36667: (2) open(/data/data/my.androidPieTrial.app/databases/admin.db),android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14 SQLITE_CANTOPEN): Could not open database。
context.getDatabasePath(the_database_name).getAbsolutePath();
(自 API 1 起可用,因此适用于所有版本)。 - MikeT