دیتابیس Sqlite در kotlin (اندروید)

سلام توسعه دهندگان عزیز در این سری از آموزش برنامه نویسی اندروید به آموزش دیتابیس Sqlite در kotlin (اندروید) می پردازیم از دیتابیس در اندروید به منظور ذخیره سازی داده استفاده می شود قبلا آموزش دیتابیس Sqlite را در برنامه نویسی اندروید برای شما قرار داده بودیم در این آموزش نحوه پیاده سازی دیتابیس Sqlite را در کوتلین (kotlin) برای شما قرار میدهیم.
 
برخی تصور می کنند دیتابیس در اندروید البته در برنامه نویسی کوتلین (kotlin) کمی سخت باشد اما شاید ساده تر از کد جاوا نیز باشد (این آموزش به صورت کلی قرار می گیرد سپس به صورت بخش بخش هر متد توضیح داده خواهد شد.)
به صورت رسمی دیتابیس SQlite برای Kotlin عرضه نشده ولی مثل قبل بیشتر توسعه دهندگان کارها رو جلو میبرند دیتابیسی که در ادامه معرفی می کنم کاملا رسمی است.
وارد فایل Build.gradle شده و کتاب خانه زیر را sync کنید.

dependencies {
    compile "org.jetbrains.anko:anko-sqlite:0.10.4"
}

پروزه را sync کنید قند شکن فراموش نشود.
اگر دیتابیس SQlite را در اندروید تست کرده باشید از یک کلاس Helper به منظور استفاده از دیتابیس ساخته شده و با دیتابیس کار می کردیم در اینجا هم به همان شکل است.
پس یک کلاس به نام MyDatabaseOpenHelper ایجاد کرده و کدهای زیر را در آن قرار دهید.

class MyDatabaseOpenHelper(ctx: Context) : ManagedSQLiteOpenHelper(ctx, "MyDatabase", null, 1) {
    companion object {
        private var instance: MyDatabaseOpenHelper? = null
        @Synchronized
        fun getInstance(ctx: Context): MyDatabaseOpenHelper {
            if (instance == null) {
                instance = MyDatabaseOpenHelper(ctx.getApplicationContext())
            }
            return instance!!
        }
    }
    override fun onCreate(db: SQLiteDatabase) {
        // Here you create tables
        db.createTable("Customer", true,
                    "id" to INTEGER + PRIMARY_KEY + UNIQUE,
                    "name" to TEXT,
                    "photo" to BLOB)
    }
    override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
        // Here you can upgrade tables, as usual
        db.dropTable("User", true)
    }
}
// Access property for Context
val Context.database: MyDatabaseOpenHelper
    get() = MyDatabaseOpenHelper.getInstance(getApplicationContext())

در اینجا هم از دو کد برای دسترسی به دیتا  getReadableDatabase() یا getWritableDatabase() همانند جاوا استفاده می کنیم. در بالا به همان شیوه قبل به منظور ساخت دیتابیس عمل کردیم یعنی یک Table ساختیم یکسری ستون برای آن در نظر گرفتیم.
در Sqlite کلا شما می توانید با پنج نوع داده کار کنید که عبارتند از :

  • NULL
  • INTEGER
  • REAL
  • TEXT
  • BLOB

برای اینکه یک Table را drop کنید می توانید از کد زیر استفاده کنید.

dropTable("User", true)

برای اینکه داده را Insert کنیم باید از ContetValues استفاده کنیم (قبلا توضیح داده شده است از این لینک استفاده کنید.)

val values = ContentValues()
values.put("id", 5)
values.put("name", "John Smith")
values.put("email", "user@domain.org")
db.insert("User", null, values)

یکی از ویژگی های که این کتاب خانه دارد و فوق العاده است می توانید داده ها را به شکل مختلف Insert کنید کد زیر را بررسی کنید.

db.insert("User",
    "id" to 42,
    "name" to "John",
    "email" to "user@domain.org"
)

با استفاده از کلمه کلیدی database.use می توانید Insert نیز انجام دهید.

database.use {
    insert("User",
        "id" to 42,
        "name" to "John",
        "email" to "user@domain.org"
   )
}

دستور Select در این دیتابیس همانند زیر است.

db.select("User", "name")
    .whereArgs("(_id > {userId}) and (name = {userName})",
        "userName" to "John",
        "userId" to 42)

در بالا به جای فیلد {userId} مقدار 42 می نشنید و به جای {userName} مقدار John.
همانند Cursor در SQlite در اینجا نیز چیزی برای parse دیتا بازگشتی داریم.

Method Description
parseSingle(rowParser): T Parse exactly one row
parseOpt(rowParser): T? Parse zero or one row
parseList(rowParser): List<T> Parse zero or more rows

در صورتی که اگر مطمئن هستید که همیشه یک row برمیگردد از متد parseSingle استفاده کنید.
در صورتی که تعداد ستون ها بین 0 تا یک است از متد parseOpt استفاده کنید.
در صورتی بیش از یک یا 0 است از متد parseList استفاده کنید.
به عنوان مثال اگر یک Data Model ایجاد کرده باشید مثل زیر

class Person(val firstName: String, val lastName: String, val age: Int)

و بخواهید یک شئی یا row از person بسازید مثل زیر می شود بعد می تواند داده برگشتی از دیتابیس  را در آن قرار دهید.

val rowParser = classParser<Person>()

اگر بخواهید داده ای را آپدیت کنید از کدهای زیر استفاده کنید.

update("User", "name" to "Alice")
    .where("_id = {userId}", "userId" to 42)
    .exec()

در بالا هم همانند دستور select است.
دستور update همراه با where همراه با مقدار فیلد به صورت مستقیم

update("User", "name" to "Alice")
    .`whereSimple`("_id = ?", 42)
    .exec()

برای حذف داده هم از کد زیر استفاده کنید

val numRowsDeleted = delete("User", "_id = {userID}", "userID" to 37)

 
 
این آموزش هم به پایان رسید.
موفق و پیروز باشید.

مطالعه بیشتر