دیتابیس Sqlite در kotlin (اندروید)
سلام توسعه دهندگان عزیز در این سری از آموزش برنامه نویسی اندروید به آموزش دیتابیس Sqlite در kotlin (اندروید) می پردازیم از دیتابیس در اندروید به منظور ذخیره سازی داده استفاده می شود قبلا آموزش دیتابیس Sqlite را در برنامه نویسی اندروید برای شما قرار داده بودیم در این آموزش نحوه پیاده سازی دیتابیس Sqlite را در کوتلین (kotlin) برای شما قرار میدهیم.
برخی تصور می کنند دیتابیس در اندروید البته در برنامه نویسی کوتلین (kotlin) کمی سخت باشد اما شاید ساده تر از کد جاوا نیز باشد (این آموزش به صورت کلی قرار می گیرد سپس به صورت بخش بخش هر متد توضیح داده خواهد شد.)
به صورت رسمی دیتابیس SQlite برای Kotlin عرضه نشده ولی مثل قبل بیشتر توسعه دهندگان کارها رو جلو میبرند دیتابیسی که در ادامه معرفی می کنم کاملا رسمی است.
وارد فایل Build.gradle شده و کتاب خانه زیر را sync کنید.
1 2 3 | dependencies { compile "org.jetbrains.anko:anko-sqlite:0.10.4" } |
پروزه را sync کنید قند شکن فراموش نشود.
اگر دیتابیس SQlite را در اندروید تست کرده باشید از یک کلاس Helper به منظور استفاده از دیتابیس ساخته شده و با دیتابیس کار می کردیم در اینجا هم به همان شکل است.
پس یک کلاس به نام MyDatabaseOpenHelper ایجاد کرده و کدهای زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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 کنید می توانید از کد زیر استفاده کنید.
1 | dropTable("User", true) |
برای اینکه داده را Insert کنیم باید از ContetValues استفاده کنیم (قبلا توضیح داده شده است از این لینک استفاده کنید.)
1 2 3 4 5 | val values = ContentValues() values.put("id", 5) values.put("name", "John Smith") values.put("email", "user@domain.org") db.insert("User", null, values) |
یکی از ویژگی های که این کتاب خانه دارد و فوق العاده است می توانید داده ها را به شکل مختلف Insert کنید کد زیر را بررسی کنید.
1 2 3 4 5 | db.insert("User", "id" to 42, "name" to "John", "email" to "user@domain.org" ) |
با استفاده از کلمه کلیدی database.use می توانید Insert نیز انجام دهید.
1 2 3 4 5 6 7 | database.use { insert("User", "id" to 42, "name" to "John", "email" to "user@domain.org" ) } |
دستور Select در این دیتابیس همانند زیر است.
1 2 3 4 | 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 ایجاد کرده باشید مثل زیر
1 | class Person(val firstName: String, val lastName: String, val age: Int) |
و بخواهید یک شئی یا row از person بسازید مثل زیر می شود بعد می تواند داده برگشتی از دیتابیس را در آن قرار دهید.
1 | val rowParser = classParser<Person>() |
اگر بخواهید داده ای را آپدیت کنید از کدهای زیر استفاده کنید.
1 2 3 | update("User", "name" to "Alice") .where("_id = {userId}", "userId" to 42) .exec() |
در بالا هم همانند دستور select است.
دستور update همراه با where همراه با مقدار فیلد به صورت مستقیم
1 2 3 | update("User", "name" to "Alice") .`whereSimple`("_id = ?", 42) .exec() |
برای حذف داده هم از کد زیر استفاده کنید
1 | val numRowsDeleted = delete("User", "_id = {userID}", "userID" to 37) |
این آموزش هم به پایان رسید.
موفق و پیروز باشید.
بسیار ساده و مختصر و کاربردی
ممنون بابت آموزش خوبتون اما یک سوال آیا کاتلین دیتابیس مخصوص به خودش رو داره ؟ یا برای کاتلین هم از دیتابیس های معمول باید استفاده کرد مثل sqlite ؟