В Android проверьте, существует ли база данных sqlite время от времени терпит неудачу

в 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;
}

проблема в том, что я получаю отчеты от пользователей, говорящих, что их данные были стерты, и при расследовании я вижу, что база данных заменяется базой данных из активов. Так почему даже если у пользователя уже есть файл базы данных, иногда SQLiteDatabase.openDatabase() выдает ошибку. Я не смог воспроизвести проблему сам, но, похоже, это происходит для некоторых пользователей.

кто-нибудь есть идея, что проблема может быть здесь? Есть ли лучший способ сделать этот тест?

2 ответов


Как насчет просто проверить файловую систему, чтобы увидеть, существует ли база данных, а не пытаться открыть ее первым?

вы можете попытаться открыть базу данных, которая уже открыта, и это вызовет ошибку, заставляющую вас думать, что она не существует.

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");
}

Я хочу поделиться методом, чтобы проверить, существует ли база данных: Дайте мне +1, если он работает для вас, Спасибо.

private boolean checkDataBase() {

    SQLiteDatabase checkDB = null;

    try {

        File database=myContext.getDatabasePath(DB_NAME);

        if (database.exists()) {

            Log.i("Database", "Found");

            String myPath = database.getAbsolutePath();

            Log.i("Database Path", myPath);

            checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

        } else {                

            // Database does not exist so copy it from assets here
            Log.i("Database", "Not Found");

        }

    } catch(SQLiteException e) {

        Log.i("Database", "Not Found");

    } finally {

        if(checkDB != null) {

            checkDB.close();

        }

    }

    return checkDB != null ? true : false;
}