Библиотека androidx.sqlite
содержит абстрактные интерфейсы и базовые реализации, которые можно использовать для создания собственных библиотек, обращающихся к SQLite. Возможно, вы захотите рассмотреть возможность использования библиотеки Room , которая обеспечивает уровень абстракции поверх SQLite, чтобы обеспечить более надежный доступ к базе данных, используя при этом всю мощь SQLite.
Настройка зависимостей
Текущая версия androidx.sqlite
, поддерживающая многоплатформенность Kotlin (KMP), — 2.5.0-alpha01 или выше.
Чтобы настроить SQLite в проекте KMP, добавьте зависимости для артефактов в файл build.gradle.kts
для вашего модуля:
-
androidx.sqlite:sqlite
— интерфейсы драйвера SQLite. -
androidx.sqlite:sqlite-bundled
— реализация встроенного драйвера.
API-интерфейсы драйверов SQLite
Группы библиотек androidx.sqlite
предлагают низкоуровневые API для связи с библиотекой SQLite, включенной либо в библиотеку при использовании androidx.sqlite:sqlite-bundled
, либо в хост-платформу, например Android или iOS, при использовании androidx.sqlite:sqlite-framework
. API-интерфейсы точно соответствуют основным функциям SQLite C API.
Существует 3 основных интерфейса:
-
SQLiteDriver
— это точка входа в использование SQLite, отвечающая за открытие подключений к базе данных. -
SQLiteConnection
— представление объектаsqlite3
. -
SQLiteStatement
— представление объектаsqlite3_stmt
.
В следующем примере демонстрируются основные API:
fun main() {
val databaseConnection = BundledSQLiteDriver().open("todos.db")
databaseConnection.execSQL(
"CREATE TABLE IF NOT EXISTS Todo (id INTEGER PRIMARY KEY, content TEXT)"
)
databaseConnection.prepare(
"INSERT OR IGNORE INTO Todo (id, content) VALUES (? ,?)"
).use { stmt ->
stmt.bindInt(index = 1, value = 1)
stmt.bindText(index = 2, value = "Try Room in the KMP project.")
stmt.step()
}
databaseConnection.prepare("SELECT content FROM Todo").use { stmt ->
while (stmt.step()) {
println("Action item: ${stmt.getText(0)}")
}
}
databaseConnection.close()
}
Подобно API SQLite C, обычное использование заключается в следующем:
- Откройте соединение с базой данных, используя созданную реализацию
SQLiteDriver
. - Подготовьте оператор SQL с помощью
SQLiteConnection.prepare()
- Выполните
SQLiteStatement
следующим образом:- Опционально связывание аргументов с помощью функций
bind*()
. - Перебор результирующего набора с помощью функции
step()
. - Чтение столбцов из набора результатов с помощью функций
get*()
.
- Опционально связывание аргументов с помощью функций
Реализации драйверов
В следующей таблице приведены доступные реализации драйверов:
Имя класса | Артефакт | Поддерживаемые платформы |
AndroidSQLiteDriver | androidx.sqlite:sqlite-framework | Андроид |
NativeSQLiteDriver | androidx.sqlite:sqlite-framework | iOS, Mac и Linux |
BundledSQLiteDriver | androidx.sqlite:sqlite-bundled | Android, iOS, Mac, Linux и JVM (настольный компьютер) |
Рекомендуемая реализация — BundledSQLiteDriver
доступная в androidx.sqlite:sqlite-bundled
. Он включает библиотеку SQLite, скомпилированную из исходного кода, предлагающую самую актуальную версию и согласованность на всех поддерживаемых платформах KMP.
Драйвер SQLite и комната
API-интерфейсы драйверов полезны для низкоуровневого взаимодействия с базой данных SQLite. Для многофункциональной библиотеки, обеспечивающей более надежный доступ к SQLite, рекомендуется использовать Room.
RoomDatabase
использует SQLiteDriver
для выполнения операций с базой данных, и реализацию необходимо настроить с помощью RoomDatabase.Builder.setDriver()
. Room предоставляет RoomDatabase.useReaderConnection
и RoomDatabase.useWriterConnection
для более прямого доступа к управляемым подключениям к базе данных.