Работа с SQLite в Kotlin

НАВИГАЦИЯ ПО СТРАНИЦЕ

Использование SQLiteOpenHelper Операции CRUD
ПОЛНЫЙ ОТВЕТ
БЕЗ ВОДЫ
Без воды — краткий вариант ответа,
легко понять и запомнить

В Kotlin можно использовать библиотеку для работы с базой данных SQLite. В Android, часто используется SQLiteOpenHelper для управления базой данных. Давайте рассмотрим основы работы с SQLite в Kotlin на примере Android-приложения.

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

import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper

class DatabaseHelper(context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) {

    companion object {
        private const val DATABASE_NAME = "mydatabase.db"
        private const val DATABASE_VERSION = 1
        private const val TABLE_NAME = "mytable"
        private const val COLUMN_ID = "_id"
        private const val COLUMN_NAME = "name"
    }

    override fun onCreate(db: SQLiteDatabase) {
        val createTableQuery = """
            CREATE TABLE $TABLE_NAME (
                $COLUMN_ID INTEGER PRIMARY KEY AUTOINCREMENT,
                $COLUMN_NAME TEXT
            );
        """.trimIndent()
        db.execSQL(createTableQuery)
    }

    override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
        db.execSQL("DROP TABLE IF EXISTS $TABLE_NAME")
        onCreate(db)
    }
}

Операции CRUD

import android.content.ContentValues
import android.content.Context
import android.database.Cursor
import android.database.sqlite.SQLiteDatabase

class MyDataSource(context: Context) {

    private val databaseHelper: DatabaseHelper = DatabaseHelper(context)
    private val db: SQLiteDatabase = databaseHelper.writableDatabase

    fun insertData(name: String): Long {
        val contentValues = ContentValues().apply {
            put(DatabaseHelper.COLUMN_NAME, name)
        }
        return db.insert(DatabaseHelper.TABLE_NAME, null, contentValues)
    }

    fun readData(): List<String> {
        val result: MutableList<String> = ArrayList()
        val cursor: Cursor = db.query(
            DatabaseHelper.TABLE_NAME,
            arrayOf(DatabaseHelper.COLUMN_NAME),
            null, null, null, null, null
        )

        while (cursor.moveToNext()) {
            val name = cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_NAME))
            result.add(name)
        }

        cursor.close()
        return result
    }

    fun updateData(id: Long, newName: String): Int {
        val contentValues = ContentValues().apply {
            put(DatabaseHelper.COLUMN_NAME, newName)
        }

        return db.update(
            DatabaseHelper.TABLE_NAME,
            contentValues,
            "${DatabaseHelper.COLUMN_ID} = ?",
            arrayOf(id.toString())
        )
    }

    fun deleteData(id: Long): Int {
        return db.delete(
            DatabaseHelper.TABLE_NAME,
            "${DatabaseHelper.COLUMN_ID} = ?",
            arrayOf(id.toString())
        )
    }
}

В этом примере:

  • DatabaseHelper отвечает за создание и обновление базы данных.

  • MyDataSource содержит операции CRUD (Create, Read, Update, Delete) для взаимодействия с базой данных.

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

val dataSource = MyDataSource(context)

// Insert
val newId = dataSource.insertData("John Doe")

// Read
val data = dataSource.readData()

// Update
dataSource.updateData(newId, "Updated Name")

// Delete
dataSource.deleteData(newId)

Это основы работы с SQLite в Kotlin, включая использование SQLiteOpenHelper для управления базой данных и операции CRUD для взаимодействия с данными. В реальном приложении следует обеспечить безопасность и проверку ошибок для обработки потенциальных проблем при работе с базой данных.