ver En Android, compruebe si la base de datos sqlite existe falla de vez en cuando




ver base de datos sqlite android (2)

En Android utilizo el siguiente método para ver si existe la base de datos sqlite y si puedo abrirla y usarla.

Si no pasa esta prueba, copio el archivo de la base de datos de los activos (esto solo debería ocurrir una vez, cuando el usuario inicia la aplicación por primera vez).

/*
* 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;
}

El problema es que recibo informes de usuarios que dicen que sus datos se han borrado y cuando investigo puedo ver que la base de datos se reemplaza con la base de datos de los activos. Por lo tanto, por alguna razón, incluso si el usuario ya tiene un archivo de base de datos, a veces SQLiteDatabase.openDatabase () arroja un error. No he podido reproducir el problema yo mismo, pero parece que ocurre para algunos usuarios.

¿Alguien tiene una idea de cuál podría ser el problema aquí? ¿Hay una mejor manera de hacer esta prueba?

https://code.i-harness.com


¿Qué tal si solo verificas el sistema de archivos para ver si existe la base de datos en lugar de intentar abrirlo primero?

Podría intentar abrir una base de datos que ya está abierta y que generará un error que le hará pensar que no existe.

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

Quiero compartir un método para verificar si existe una base de datos: Dame un +1 si funciona bien para ti, gracias.

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




sqlite