Подтвердить что ты не робот

Зачем использовать SQLiteOpenHelper над SQLiteDatabase?

В моей деятельности я имею, например,

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

Какая польза от использования SQLiteOpenHelper как

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

Сам класс

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) {
    }
}
4b9b3361

Ответ 1

SQLiteDatabase

SQLiteDatabase имеет методы для создания, удаления, выполнения команд SQL, и выполнять другие общие задачи управления базой данных.

SQLiteOpenHelper

Вспомогательный класс для управления созданием базы данных и управлением версиями.

Я так много скажу, что onUpgrade, который поставляется с SQLiteOpenHelper, действительно полезен при обновлении вашего приложения. Это в основном для создания и обновления/управления версиями. SQLiteDatabase в основном предназначена для операций CRUD (вы можете создавать с ним, но это то, что для SQLiteOpenHelper).

Ответ 2

SQLiteOpenHelper предоставляет утилиты для упрощения задач создания и инициализации базы данных, если она еще не создана и не конвертирует содержимое базы данных при обновлении вашего приложения и не изменяется схема базы данных.

Если у вас очень простая схема базы данных, это на самом деле не очень много, но для чего-то сложного это определенная помощь. Он гарантирует, что все условия крайнего края будут покрыты так, что вам не нужно, например, поместить транзакции во все нужные места, чтобы избежать повреждения базы данных.

Ответ 3

Помимо других ответов, одна очень важная функция в классе SQLiteOpenHelper, она имеет 2 синхронизированных метода, getWritableDatabase() и getReadableDatabase().

Это означает, что ваши операции с базой данных потокобезопасны.

фрагмент кода из SQLiteOpenHelper class

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

и

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

Ответ 4

Как написано в официальной ссылке разработчика

Вспомогательный класс для управления созданием базы данных и управлением версиями.

Создается подкласс, реализующий onCreate (SQLiteDatabase), onUpgrade (SQLiteDatabase, int, int) и необязательно onOpen (SQLiteDatabase), и этот класс заботится об открытии если он существует, создавая его, если он этого не делает, и обновляя его как необходимо. Транзакции используются, чтобы гарантировать, что база данных всегда в разумном состоянии.

Этот класс упрощает реализацию ContentProvider для отсрочки открытие и обновление базы данных до первого использования, чтобы избежать блокировки запуск приложения с длительными обновлениями базы данных.

В качестве примера см. класс NotePadProvider в примере NotePad приложение в каталоге samples/SDK.

Итак, SQLiteOpenHelper упрощает работу.

Вы можете использовать эту ссылку, чтобы узнать, как обращаться с SQLite с помощью SQLiteOpenHelper. Учебное пособие по SQLiteOpenHelper.