webentwicklung-frage-antwort-db.com.de

Warum SQLiteOpenHelper über SQLiteDatabase verwenden?

In meiner Tätigkeit habe ich zum Beispiel

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

Was ist der Vorteil von 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();

Klasse selbst

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 verfügt über Methoden zum Erstellen, Löschen, Ausführen von SQL-Befehlen Und zum Ausführen anderer üblicher Datenbankverwaltungsaufgaben.

SQLiteOpenHelper

Eine Hilfsklasse zum Verwalten der Datenbankerstellung und Versionsverwaltung.

Ich sage das so viel, das OnUpgrade, das mit SQLiteOpenHelper geliefert wird, ist wirklich praktisch, wenn Sie Ihre Anwendung aktualisieren. Es ist hauptsächlich für die Erstellung und Aktualisierung/Versionsverwaltung gedacht. SQLiteDatabase ist hauptsächlich für CRUD-Operationen gedacht (Sie können damit erstellen, aber dafür gibt es SQLiteOpenHelper).

35
Jack

SQLiteOpenHelper bietet Dienstprogramme zum Vereinfachen der Aufgaben zum Erstellen und Initialisieren der Datenbank, wenn diese noch nicht erstellt wurde, und konvertiert den Inhalt der Datenbank, wenn Ihre Anwendung aktualisiert wird und das Datenbankschema geändert wird.

Wenn Sie ein sehr einfaches Datenbankschema haben, bringt es Sie nicht wirklich viel, aber für alles Komplizierte ist es eine eindeutige Hilfe. Dadurch wird sichergestellt, dass alle fummeligen Edge-Bedingungen abgedeckt werden, sodass Sie keine Transaktionen durchführen müssen, z. B. Transaktionen an den richtigen Stellen ablegen, um eine Beschädigung der Datenbank zu vermeiden.

12
David Given

Neben anderen Antworten, einer sehr wichtigen Funktion in der Klasse SQLiteOpenHelper, gibt es zwei synchronisierte Methoden, getWritableDatabase() und getReadableDatabase().

Das heißt, Ihre Datenbankoperationen sind thread safe .

Code-Snippet der SQLiteOpenHelper-Klasse

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

und

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

Wie es in der offiziellen Entwicklerreferenz steht 

Eine Hilfsklasse zum Verwalten der Datenbankerstellung und Versionsverwaltung.

Sie erstellen eine Unterklasse, die onCreate (SQLiteDatabase), OnUpgrade (SQLiteDatabase, int, int) und optional OnOpen (SQLiteDatabase) implementiert. Diese Klasse sorgt dafür, dass die Datenbank Geöffnet wird Es existiert, erstellt es, wenn nicht, und aktualisiert es als erforderlich. Transaktionen werden verwendet, um sicherzustellen, dass sich die Datenbank immer In einem vernünftigen Zustand befindet.

Diese Klasse erleichtert es ContentProvider-Implementierungen, das Öffnen und Aktualisieren der Datenbank bis zur ersten Verwendung durch Zu verzögern, um das Blockieren des Anwendungsstarts bei langwierigen Datenbank-Upgrades zu vermeiden.

Ein Beispiel finden Sie in der NotePadProvider-Klasse in der NotePad-Beispielanwendung Im Verzeichnis samples/des SDK.

SQLiteOpenHelper macht die Sache also einfacher. 

Sie können diesen Link verwenden, um zu lernen, wie SQLite mit SQLiteOpenHelper behandelt wird.SQLiteOpenHelper Tutorial.

0
Shaba Aafreen