[Android-Kotlin]スタジオの使い方


(注意)自分の勉強や理解したことを整理しました.参考にしてください.少し手がかりがあるかもしれません.
🤔 スタジオとは?
ルーム持続可能性ライブラリはSQLiteに抽象層を提供し、SQLiteを十分に活用しながらデータベースにより信頼性の高いアクセスを実現します.
by android developer
以下に示すように、ルームを定義しています.つまり、SQLliteを直接使用するのではなく、RoomというライブラリでSQLiteを使用します.
🙄なぜ使うのですか?
もしそうであれば、スタジオではなくSQLiteを直接使用できます.
なぜ他のライブラリを使用するのですか?
大量の構造化データを処理するアプリケーションは、データをローカルに維持し、大きなメリットを得ることができます.最も一般的な使用状況は、関連データをキャッシュすることです.これにより、デバイスがネットワークにアクセスできない場合でも、ユーザはオフラインでコンテンツを閲覧することができる.後でアプライアンスが再オンラインになると、ユーザーが開始したコンテンツの変更がサーバに同期されます.
by android developer
つまり、オンラインでもオフラインでも、データベースを使いたい!
😮 使用方法
これからは、どのように使用するかを深く検討します.
  • データエンティティの作成-データベース内のテーブル
  • を表します.
  • データ・アクセス・オブジェクト(データ・アクセス・オブジェクト)の作成-クエリー・ステートメントを使用する
  • データベースクラスの作成-データベースとサービスを接続するプライマリ・アクセスポイント
  • 1. Data entity
    @Entity(tableName = "user_table")
    data class User(
        @PrimaryKey(autoGenerate = true) var userid: Int?,
        @ColumnInfo(name = "devicenum") var devicenum: Int?
        )
    user tableというentityが作成されました.
    User Tableが@primaryKeyを使用してuseridを保持する場合、
    AutoGenerateとします.
    その他のカラムは@ColumnInfoとして定義されます.Debicenumのように
    Int型のカラムがあります.
    2. Data Access Object (DAO)
    interface UserDao {
        @Insert 
        fun addUser(user:User)
    
        @Query("SELECT * FROM user_table ORDER BY userid ASC")
        fun readAllData(): LiveData<List<User>>
        
        @Delete
        fun delete(user:User)
    }
    
    user tableで使用したいクエリーintface userdaoを使用します.
    既存のクエリ文と同様に@QueryでSELECT文を使用できます.
    また、WHERE文を使用して特定のidを指定してクエリーを生成することもできます.この場合、特定のidは「id」と表示され、関数の主変数として受信されます.
    3. Database
    @Database(entities = [User::class], version = 1, exportSchema = false)
    abstract class UserDatabase: RoomDatabase() {
        abstract fun userDao():UserDao
    
        companion object {
            @Volatile
            private var INSTANCE: UserDatabase? = null
    
            fun getDatabase(context: Context): UserDatabase{
                val tempInstance = INSTANCE
                if(tempInstance != null){
                    return tempInstance
                }
                synchronized(this){
                    val instance = Room.databaseBuilder(
                        context.applicationContext,
                        UserDatabase::class.java,
                        "user_database"
                    ).build()
                    INSTANCE = instance
                    return instance
                }
            }
    
        }
    }
    データベースに関連付けられたclass.
    RoomDatabaseを拡張する必要があります.そしてDatabasebuilderで
    synchronized(this){
                    val instance = Room.databaseBuilder(
                        context.applicationContext,
                        UserDatabase::class.java,
                        "user_database"
                    ).build()
                    INSTANCE = instance
                    return instance
    このセクションでは、データベースclassとentityを接続します.
    😁参考資料
    room