web-dev-qa-db-fra.com

Pourquoi utiliser SQLiteOpenHelper sur SQLiteDatabase?

Dans mon activité j'ai par exemple

SQLiteDatabase db = openOrCreateDatabase(Preferences.DB_NAME, Context.MODE_PRIVATE, null);
db.execSQL("CREATE TABLE IF NOT EXISTS data (id INTEGER PRIMARY KEY, value VARCHAR)");
Cursor dbResult = db.rawQuery("SELECT value FROM data", null);
// do sometning with cursors
dbResult.close();
db.close();

Quel est l'avantage d'utiliser SQLiteOpenHelper like

DatabaseHelper helper = new DatabaseHelper(this);
SQLiteDatabase db = helper.getWriteableDatabase();
SQLiteDatabase db_2 = helper.getReadableDatabase();
Cursor dbResult = db_2.rawQuery("SELECT value FROM data", null);
// do sometning with cursors
dbResult.close();
helper.close();

Classe elle-même

public class DatabaseHelper extends SQLiteOpenHelper {
    public DatabaseHelper(Context context) {
        super(context, Preferences.DB_NAME, null, Preferences.DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String query = "CREATE TABLE IF NOT EXISTS data (id INTEGER PRIMARY KEY, value VARCHAR)";
        db.execSQL(query);
        db.close();
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
}
35
svenkapudija

SQLiteDatabase

SQLiteDatabase a des méthodes pour créer, supprimer, exécuter des commandes SQL, et effectuer d'autres tâches courantes de gestion de base de données.

SQLiteOpenHelper

Une classe d'assistance pour gérer la création de la base de données et la gestion des versions.

Je dirai ceci: la mise à niveau fournie avec SQLiteOpenHelper est vraiment utile lors de la mise à niveau de votre application. C'est principalement pour la création et la mise à niveau/la gestion des versions. SQLiteDatabase est principalement destiné aux opérations CRUD (vous pouvez créer avec, mais c'est à quoi sert SQLiteOpenHelper).

35
Jack

SQLiteOpenHelper fournit des utilitaires permettant de simplifier les tâches de création et d'initialisation de la base de données si elle n'est pas déjà créée et de convertir le contenu de la base de données lorsque votre application est en cours de mise à niveau et que le schéma de base de données est modifié.

Si vous avez un schéma de base de données très simple, il ne vous apportera pas grand-chose, mais pour quelque chose de compliqué, c'est une aide précieuse. Cela garantit que toutes les conditions délicates de Edge sont couvertes afin que vous n'ayez pas à le faire, par exemple, placer des transactions aux endroits appropriés pour éviter la corruption de la base de données.

12
David Given

Au-dessus des autres réponses, une caractéristique très importante de la classe SQLiteOpenHelper, elle dispose de 2 méthodes synchronisées, getWritableDatabase() et getReadableDatabase().

Cela signifie que vos opérations de base de données sont thread safe .

Extrait de code de la classe SQLiteOpenHelper

public SQLiteDatabase getReadableDatabase() {
    synchronized (this) {
        return getDatabaseLocked(false);
    }
}

et

public SQLiteDatabase getWritableDatabase() {
    synchronized (this) {
        return getDatabaseLocked(true);
    }
}
4

Comme il est écrit dans la référence officielle du développeur 

Une classe d'assistance pour gérer la création de la base de données et la gestion des versions.

Vous créez une sous-classe implémentant onCreate (SQLiteDatabase), onUpgrade (SQLiteDatabase, int, int) et éventuellement onOpen (SQLiteDatabase), et cette classe se charge d’ouvrir le base de données si elle existe, en la créant si ce n’est pas le cas et en la mettant à niveau en. nécessaire. Les transactions sont utilisées pour s'assurer que la base de données est toujours dans un état sensible.

Cette classe permet aux implémentations de ContentProvider de différer facilement ouverture et mise à niveau de la base de données jusqu'à la première utilisation, pour éviter le blocage démarrage de l'application avec mises à niveau de base de données longue durée.

Pour un exemple, voir la classe NotePadProvider dans l'exemple de bloc-notes application, dans le répertoire samples/du SDK.

Donc, SQLiteOpenHelper rend les choses plus faciles. 

Vous pouvez utiliser ce lien pour apprendre à gérer SQLite avec SQLiteOpenHelper. Tutoriel SQLiteOpenHelper.

0
Shaba Aafreen