2011-11-04 18 views
8

En Android uso el siguiente método para ver si existe la base de datos sqlite y si puedo abrirla y usarla.En Android, compruebe si la base de datos sqlite existe falla de vez en cuando

Si no pasa esta prueba, copio el archivo de 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 puedo informes de los usuarios diciendo que sus datos han sido borrados y en la investigación de lo que 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 lo que podría ser el problema aquí? ¿Hay una mejor manera de hacer esta prueba?

+0

Por favor, ayuda con este http://stackoverflow.com/questions/20728808/android-reading-stored-sqlite-database – gandharv09

Respuesta

32

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

Puede que esté intentando 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"); 
} 
+0

Esto no funciona para mí! Ver http://stackoverflow.com/questions/18391820/checking-if-database-exists –

+3

Estaba tratando de contactar al OP para que él pudiera ayudarme. Publiqué mi propia pregunta y el enlace aparece más arriba. No estoy 'contaminando' nada simplemente pidiendo ayuda, que es el propósito de este sitio web. –

2

quiero compartir un método para comprobar si existe base de datos: Dame un 1 si funciona bien para usted, 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; 
} 
+0

No es un buen método, ya que sufre del mismo problema que el OP. Si la base de datos existe pero no se puede abrir, informa que no existe. Comprobar si existe una base de datos y si se puede abrir debe ser operaciones independientes si necesita hacer ambas cosas. También esto se basa en una excepción lanzada para determinar el estado de la base de datos que no es una buena práctica. – Kuffs

Cuestiones relacionadas