-1

Databases on Android with Anko and Kotlin

Chào mọi người, hiện tại kotlin đã được google support trực tiếp và công nhận là một ngôn ngữ để phát triển android. Trong bài viết này, mình sẽ chia sẻ một vấn đề mà chúng ta rât hay gặp phải khi làm việc với android đó là database. Vậy với kotlin thì làm việc với database như thế nào cho tiện lợi nhất, và thư viện nào có thể support việc này, đó chính là : "Anko" Bắt đầu nhé Vậy Anko có những ưu điểm gì mà chúng ta sẽ sử dụng

  1. Anko có cú pháp nhỏ gọn, dễ hiểu
  2. Tốc độ thực thi nhanh hơn so với Sqlite thuần mà chúng ta sử dụng và còn khá nhiều lợi ích nữa, các bạn có thể vào tài liệu bên dưới để tham khảo thêm Đầu tiên, thêm Anko vào android studio
compile 'org.jetbrains.anko:anko-sqlite:0.10.0'

Nếu chúng ta không sử dụng thư viện, ta se cần 1 class SQLiteOpenHelper để truy xuất cơ sở dữ liệu. Sau đó, phải xử lý một loạt yêu cầu như open hay close bằng 1 loạt các câu truy vấn. Nhưng với Anko, chúng ta chỉ cần gọi như sau

database.use { 
    ...
}

nội dung bên trong dấu ngoặc là một chức năng mở rộng trên SQLiteDatabase do đó, có thể gọi phương thức trực tiếp. Có một điều đặc biệt là DB sẽ được mở trước và đóng sau khi thực hiện khối này. Làm thế nào để chúng a có thể thực hiện được class này, Anko đã gợi ý cho chúng ta điều đó, bên dưới là class làm việc đó

class MySqlHelper(ctx: Context) : ManagedSQLiteOpenHelper(ctx, "mydb") {
 
    companion object {
        private var instance: MySqlHelper? = null
 
        @Synchronized
        fun getInstance(ctx: Context): MySqlHelper {
            if (instance == null) {
                instance = MySqlHelper(ctx.applicationContext)
            }
            return instance!!
        }
    }
 
    override fun onCreate(db: SQLiteDatabase) {
    }
 
    override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
    }
 
}
 
// Access property for Context
val Context.database: MySqlHelper
    get() = MySqlHelper.getInstance(applicationContext)

Tạo 1 bảng

Để tạo bảng, trong oncreate, chúng ta chỉ cần sử dụng createTable do Anko cung cấp sẵn

override fun onCreate(db: SQLiteDatabase) {
    db.createTable("User", true,
            "_id" to INTEGER + PRIMARY_KEY,
            "name" to TEXT,
            "surname" to TEXT,
            "age" to INTEGER)
}

Thấy rằng, câu lệnh của Anko khá tường minh, dễ hiểu và tương tự như cấu truy vấn SQL thông thường

Chèn và truy vấn dữ liệu

Mọi thứ trở nên dễ dàng hơn nhiều với Anko. Thay vì phải tạo riêng của bạn ContentValueđể thêm tất cả dữ liệu trong quá trình chèn, bạn có thể sử dụng một chức năng của thư viện cung cấp sẵn ví dụ như:

1. Insert data

database.use {
    insert("User",
            "_id" to 1,
            "name" to "John",
            "surname" to "Smith",
            "age" to 20)
}

hay chúng ta muốn select theo một điều kiện nào đó, sử dụng:

select("User")
        .where("(_id = {id}) and (name = {name})",
                "id" to 1,
                "name" to "John")

2. Update data

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

3. Delete Data

fun deleteWithId(id: Long) {  
datbase.use {
delete("myTable", """_id = $id""")
}

Vẫn còn rất nhiều chức năng khác, các bạn có thể tìm kiếm trên https://github.com/Kotlin/anko/wiki/Anko-SQLite https://blog.jetbrains.com/kotlin/2015/04/announcing-anko-for-android/ Với Anko, chúng ta đã có thêm một lựa chọn mới, bên cạnh các thư viện làm việc với SQLite trong android mà chúng ta đã từng sử dụng. Bài viết được tham khảo từ https://antonioleiva.com/databases-anko-kotlin/ https://blog.jetbrains.com/kotlin/2015/04/announcing-anko-for-android/ Các bạn có thể xem code trực tiếp từ github của anko https://github.com/Kotlin/anko Cảm ơn mọi người đã theo dõi, mong ý kiến góp ý của mọi người để bài viết được hoàn hảo hơn.


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.