В Android проверить, существует ли база данных sqlite, время от времени происходит сбой - PullRequest
8 голосов
/ 04 ноября 2011

В 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 ]

32 голосов
/ 04 ноября 2011

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

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

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");
}
2 голосов
/ 26 января 2014

Я хочу поделиться методом, чтобы проверить, существует ли база данных: Дайте мне +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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...