在Android中,检查sqlite数据库是否存在时不时失败

Mar*_*tin 8 database sqlite android

在Android中,我使用以下方法来查看sqlite数据库是否存在以及是否可以打开它并使用它.

如果它未通过此测试,我将从资产中复制数据库文件(这应该只发生一次,当用户首次启动应用程序时).

/*
* Check if the database already exist to avoid re-copying the file each time you open the application.
* @return true if it exists, false if it doesn't
*/
private boolean checkDataBase() {
    SQLiteDatabase checkDB = null;

    try {
        String myPath = DB_PATH + DB_NAME;
        checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
    } catch(SQLiteException e) {
        //database does't exist yet.
    }

    if(checkDB != null){
        checkDB.close();
    }
    return checkDB != null ? true : false;
}
Run Code Online (Sandbox Code Playgroud)

问题是我收到用户的报告说他们的数据已被清除,在调查时我可以看到数据库被资产中的数据库替换.因此,出于某种原因,即使用户已经有数据库文件,有时SQLiteDatabase.openDatabase()也会引发错误.我自己无法重现这个问题,但似乎有些用户会发生这种情况.

任何人都知道问题可能在这里?有没有更好的方法来进行此测试?

Kuf*_*ffs 32

如何检查文件系统以查看数据库是否存在而不是先尝试打开它?

您可能正在尝试打开已打开的数据库,这将导致错误,导致您认为它不存在.

File database=getApplicationContext().getDatabasePath("databasename.db");

if (!database.exists()) {
    // Database does not exist so copy it from assets here
    Log.i("Database", "Not Found");
} else {
    Log.i("Database", "Found");
}
Run Code Online (Sandbox Code Playgroud)

  • 我只是想联系OP,以便他可以帮助我.我发布了自己的问题,上面给出了链接.我不是在"污染"任何只是寻求帮助的东西,这是本网站的目的. (3认同)