无法在Android Pie(Android 9)中打开数据库

Vee*_*h P 5 database sqlite release android-9.0-pie

我使用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;
}
Run Code Online (Sandbox Code Playgroud)

收到此错误:os_unix.c:36667:(2)开(/data/data/my.androidPieTrial.app/databases/admin.db)android.database.sqlite.SQLiteCantOpenDatabaseException:未知错误(代码14 SQLITE_CANTOPEN):无法打开数据库

Vee*_*h P 12

我得到了解决方案.在Android Oreo及以下版本中,我访问数据库的方式工作正常但在Android Pie中它无效.这是在Android Pie中处理它的方法.

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        MySQLiteOpenHelper helper = new MySQLiteOpenHelper();
        SQLiteDatabase database = helper.getReadableDatabase();
        myPath = database.getPath();

    } else {
        String DB_PATH = Environment.getDataDirectory() + "/data/my.trial.app/databases/";
        myPath = DB_PATH + dbName;
    }

    checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
    checkDB.disableWriteAheadLogging();
Run Code Online (Sandbox Code Playgroud)

  • 我也面临着同样的问题。您能否分享MySQLiteOpenHelper类,因为否则,它真的不清楚如何解决该问题。 (2认同)