¡Consulta si existe una base de datos de Android!

He creado una base de datos para mi aplicación Android que contiene datos estáticos y no requiere funcionalidad de actualización / eliminación, por lo tanto, cuando se inicia la aplicación, quiero verificar si el archivo db existe y si no, ejecutar mi clase dbAdapter. Sé que es una simple statement if, pero me preguntaba cuál es la forma más eficiente de consultar si existe el db.

Aclamaciones

/** * Check if the database exist and can be read. * * @return true if it exists and can be read, false if it doesn't */ private boolean checkDataBase() { SQLiteDatabase checkDB = null; try { checkDB = SQLiteDatabase.openDatabase(DB_FULL_PATH, null, SQLiteDatabase.OPEN_READONLY); checkDB.close(); } catch (SQLiteException e) { // database doesn't exist yet. } return checkDB != null; } 

donde DB_FULL_PATH es la ruta a su archivo de base de datos.

Y la razón por la que no solo estoy comprobando si existe un archivo es porque no dice si (a) es un archivo sqlite db, (b) el archivo no está dañado y puede leerse, es decir, debido a una descarga parcial o sin embargo Ha sido creado.

Prefiero comprobar la existencia del archivo directamente:

 private static boolean doesDatabaseExist(Context context, String dbName) { File dbFile = context.getDatabasePath(dbName); return dbFile.exists(); } 

Cuando inicializas la siguiente clase con:

 mOpenHelper = new DatabaseHelper(getContext()); 

Eso creará automáticamente la base de datos si no está presente. También le permite actualizar la base de datos cambiando el DB_VER a un número más alto.

Entonces puedes consultar el uso de la base de datos:

  SQLiteDatabase db = mOpenHelper.getWritableDatabase(); 

lo anterior te da los métodos db.query () y db.insert () etc.

 private static class DatabaseHelper extends SQLiteOpenHelper { private static final String DB_NAME = "db_name.db"; private static final int DB_VER = 1; public DatabaseHelper(Context context) { super(context, DB_NAME, null, DB_VER); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE table_name (" + "_id INTEGER PRIMARY KEY, " + " column_name_2 TEXT );"); .execSQL("INSERT INTO table_name " + "(column_name_2) " + "VALUES " + "('hello world');"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.w(TAG + "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data"); try { db.execSQL("DROP TABLE IF EXISTS table_name"); onCreate(db); } catch (SQLException e) { Log.e(TAG + "getting exception " + e.getLocalizedMessage().toString()); } } } 

es simple: abra su base de datos en el bloque try con la ruta de da databse como:

 try{ SQLiteDatabase dbe = SQLiteDatabase.openDatabase("/data/data/bangla.rana.fahim/databases/dictionary", null,0); Log.d("opendb","EXIST"); dbe.close(); } 

si ocurre una excepción, la base de datos no se cierra, así que créela:

 catch(SQLiteException e){ Log.d("opendb","NOT EXIST"); SQLiteDatabase db = openOrCreateDatabase("dictionary", MODE_PRIVATE, null); db.execSQL("CREATE TABLE IF NOT EXISTS LIST(wlist varchar);"); db.execSQL("INSERT INTO LIST VALUES('খবর');"); db.execSQL("INSERT INTO LIST VALUES('কবর');"); //whatever you want db.close(); } 

eso es todo lo que has hecho 🙂

Probé la versión proporcionada por Mathias Conradt, pero descubrí que simplemente compruebo si DB! = Null es insuficiente. Me he modificado a esto:

  /** * Check if the database exist and can be read. * * @return true if it exists and can be read, false if it doesn't */ private boolean checkDataBase(String InDBFile) { SQLiteDatabase checkDB = null; boolean res = false; try { checkDB = SQLiteDatabase.openDatabase(InDBFile, null, SQLiteDatabase.OPEN_READONLY); res = (checkDB.getVersion() > 0); checkDB.close(); } catch (SQLiteException e) { // database doesn't exist yet. Log.e("checkDataBase", "Selected file could not be opened as DB."); res = false; } return res; } 

Cree un objeto de clase de ayuda de base de datos global en su actividad principal. En la función onCreate () de MainActivity prueba esto:

 //global database helper variable DatabaseHelper dbh; //in the onCreate() if(dbh.getReadableDatabase()!=null) //view the list else //create db