Search Header Logo
Транзакции в SQLITE

Транзакции в SQLITE

Assessment

Presentation

Information Technology (IT)

Vocational training

Practice Problem

Hard

Created by

Еркебулан Жунусов

Used 2+ times

FREE Resource

14 Slides • 0 Questions

1

Лекция: Транзакции в SQLite. Использование SQLiteStatement. onUpgrade. Обновление базы данных в SQLite

media

Жунусов Еркебұлан

2

Транзакции в SQLite

Что такое транзакция?

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

3

Основные команды транзакций в SQLite

SQLite поддерживает следующие команды для управления транзакциями:

  • BEGIN TRANSACTION; – начало транзакции.

  • COMMIT; – подтверждение изменений.

  • ROLLBACK; – отмена всех изменений, выполненных с момента начала транзакции.

4

Пример использования транзакций в SQLite на Kotlin

val db = this.writableDatabase

try {

    db.beginTransaction()

    db.execSQL("INSERT INTO users (name, age) VALUES ('Alice', 25)")
db.execSQL("INSERT INTO users (name, age) VALUES ('Bob', 30)")
db.setTransactionSuccessful()

} catch (e: Exception) {

    e.printStackTrace()

} finally {

    db.endTransaction()


5

В этом коде мы используем beginTransaction() для начала транзакции, выполняем несколько SQL-запросов и вызываем setTransactionSuccessful(), если все операции выполнены без ошибок. В блоке finally вызываем endTransaction(), что либо фиксирует изменения, либо откатывает их.

6

  • writableDatabase — позволяет читать и записывать данные.

  • readableDatabase — только чтение (если в хранилище устройства недостаточно места, база может открыться только в этом режиме).

  • try-catch — это конструкция для обработки исключений (ошибок) во время выполнения программы. Она предотвращает краш приложения при возникновении ошибки.

  • execSQL — это метод класса SQLiteDatabase, который выполняет сырые SQL-запросы (DDL и DML), такие как CREATE TABLE, INSERT, UPDATE, DELETE и DROP TABLE.

  • setTransactionSuccessful() — это метод SQLiteDatabase, который сообщает системе, что текущая транзакция успешно выполнена. Без него изменения будут отменены (ROLLBACK) при завершении транзакции.

  • e.printStackTrace() — это метод, который используется для вывода стека вызовов (stack trace) ошибки, которая произошла во время выполнения программы. Он выводит подробную информацию о месте и причине ошибки в консоль, что помогает разработчику понять, что именно пошло не так.

7

Использование SQLiteStatement

Что такое SQLiteStatement?

SQLiteStatement – это предварительно скомпилированное SQL-выражение, которое позволяет повысить производительность при многократном выполнении одного и того же запроса.

8

Пример использования SQLiteStatement на Kotlin

val db = this.writableDatabase

val sql = "INSERT INTO users (name, age) VALUES (?, ?)"

val stmt = db.compileStatement(sql)

// Вставка первого пользователя

stmt.bindString(1, "Charlie") // Привязываем строку Charlie к первому параметру

stmt.bindLong(2, 28) // Привязываем число 28 ко второму параметру

stmt.executeInsert() // Выполняем вставку

stmt.clearBindings() // Очищаем привязки, чтобы можно было использовать другие значения

// Вставка второго пользователя

stmt.bindString(1, "Diana")

stmt.bindLong(2, 32)

stmt.executeInsert()

stmt.close() // Закрываем подготовленный запрос


9

  • Метод compileStatement(sql) в SQLiteDatabase используется для подготовки (компиляции) SQL-выражения перед его выполнением. Это даёт повышенную производительность по сравнению с execSQL(), особенно если одно и то же выражение выполняется многократно.

  • bindString() — это метод, который связывает строковое значение (String) с параметром (?) в подготовленном SQL-запросе (compileStatement()).

  • bindLong() — это метод, который связывает целочисленное (Long) значение с параметром (?) в подготовленном SQL-запросе (compileStatement()).

10

Здесь SQLiteStatement используется для оптимизации вставки данных. Вместо создания нового SQL-запроса для каждого пользователя, мы компилируем один запрос и переиспользуем его, изменяя значения параметров.

11

onUpgrade: обновление базы данных в SQLite

Метод onUpgrade

При изменении структуры базы данных (например, добавлении новых таблиц или изменении полей) необходимо обновлять схему базы данных. Это выполняется в методе onUpgrade().

12

Пример реализации onUpgrade на Kotlin

override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {

    if (oldVersion < 2) {

        // Если старая версия базы меньше 2, добавляем новый столбец email в таблицу users

        db.execSQL("ALTER TABLE users ADD COLUMN email TEXT")

    }

    if (oldVersion < 3) {

        // Если старая версия базы меньше 3, создаем новую таблицу orders

        db.execSQL("CREATE TABLE orders (id INTEGER PRIMARY KEY, user_id INTEGER, amount REAL)")

    }

}


13

Этот метод вызывается автоматически при изменении версии базы данных. Он позволяет обновить структуру без потери данных. В приведенном коде, если версия базы меньше 2, добавляется новый столбец email в таблицу users. Если версия базы меньше 3, создается новая таблица orders.

14

Заключение

В данной лекции мы рассмотрели основные механизмы работы с SQLite на Kotlin:

  • Использование транзакций для обеспечения целостности данных.

  • Оптимизацию запросов с помощью SQLiteStatement.

  • Обновление базы данных через метод onUpgrade().

Эти техники позволяют создавать эффективные и надежные приложения, работающие с базами данных в Android.


Лекция: Транзакции в SQLite. Использование SQLiteStatement. onUpgrade. Обновление базы данных в SQLite

media

Жунусов Еркебұлан

Show answer

Auto Play

Slide 1 / 14

SLIDE