web-dev-qa-db-fra.com

Demander si la base de données Android existe!

J'ai créé une base de données pour mon application Android qui contient des données statiques et ne nécessite pas de fonctionnalité de mise à jour/suppression. Par conséquent, lorsque l'application démarre, je souhaite vérifier si la base de données existe et sinon, exécuter ma classe dbAdapter. Je sais que c’est une simple déclaration if, mais je me demandais simplement quel était le moyen le plus efficace de demander si la base de données existait. 

À votre santé 

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

où DB_FULL_PATH est le chemin d'accès à votre fichier de base de données.

Et la raison pour laquelle je ne vérifie pas seulement si un fichier existe, c’est qu’il ne dirait pas si (a) c’est un fichier de base de données sqlite, (b) le fichier n’est pas corrompu et peut effectivement être lu, en a été créé.

77
Mathias Conradt

Je préfère vérifier l'existence du fichier directement:

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

Lorsque vous initialisez la classe ci-dessous avec:

mOpenHelper = new DatabaseHelper(getContext());

Cela créera automatiquement la base de données si elle n’est pas présente. Il vous permet également de mettre à niveau la base de données en modifiant DB_VER en un nombre plus élevé.

Vous pouvez ensuite interroger l'utilisation de la base de données:

 SQLiteDatabase db = mOpenHelper.getWritableDatabase();

ce qui précède vous donne les méthodes db.query () & 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());
        }
    }

}
4
userdelroot

c'est simple: Ouvrez votre base de données dans try block avec le chemin d'une base de données comme:

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

si une exception se produit, la base de données ne se ferme pas, créez-la:

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

c'est ce que tu as fait :)

2
Imran Rana

J'ai essayé la version fournie par Mathias Conradt, mais j'ai trouvé que vérifier simplement si DB! = Null est insuffisant. J'ai amendé ceci:

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

Créez un objet de classe d'assistance de base de données globale dans votre activité principale. Dans la fonction onCreate () de MainActivity, essayez ceci:

//global database helper variable

DatabaseHelper dbh;

//in the onCreate()

if(dbh.getReadableDatabase()!=null)
//view the list

else
//create db
0
himanreddy