アンドロイドルームにデータを格納(スタジオ)
🤔 スタジオは何ですか。What is Room???!?
「スタジオはSQLiteの抽象層を提供し、シームレスなデータベースアクセスをサポートし、SQLiteを十分に活用しています.」https://developer.android.com/training/data-storage/room
スタジオはORM庫!?それは何ですか.
ORMはオブジェクト-リレーショナルマッピングであり、リレーショナル・データベースはテーブルを使用し、オブジェクト向けにプログラミングしてオブジェクトを使用するため、不一致を生じ、クラスとテーブルをマッピングして変換して一致させる技術はORM技術である.
簡単に言えば、スタジオはアプリケーションにデータを格納する際に内蔵の携帯電話データベースを使用します.これは書きやすいライブラリです.
🧐 うん。しかしAndroidはSQLliteをサポートしているのではないでしょうか。
SQLiteはコンパイル時にクエリーのエラーをチェックできませんが、スタジオでクエリーの有効性をチェックできます.
SQLiteはモード変更時にSQLクエリーを手動で更新する必要がありますが、スタジオは簡単に更新できます!
SQLiteはORMをサポートしていません.データをオブジェクトに変換する必要があります.
スタジオは、LiveDataなどの光ファイバモードのデータを処理する際に作成して実行することができるが、SQLiteは実行できない.
😅 OK Roomが良さそう!スタジオはどのように構成されていますか?
😗 スタジオは3つの部分で構成されています!
ここでは、データベースの実行方法をインタフェース形式で作成して定義する場所です.
これは、EntityとDAOを組み合わせてデータベースを作成したり、バージョン管理したりする抽象クラスです.
😙 では、使い方を見てみましょう。
上の3つを見るときはまず何をしますか?
👆 まずはEntityを定義!
@Entity
data class Todo(
val title: String,
val description: String?,
val isDone: Boolean,
@PrimaryKey val id: Int? = null
)
PrimaryKeyを1つ以上持っていなければなりません!
上記の例では、変数名はテーブル列名ですが、直接名前を設定する場合は、
@ColmonInfo(「name」)のプロンプトを使用して、
2つ目はDaoを定義します!データベースでDaoを定義するから!
@Dao
interface TodoDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertTodo(todo: Todo)
@Delete
suspend fun deleteTodo(todo: Todo)
@Query("SELECT * FROM todo WHERE id = :id")
suspend fun getTodoById(id: Int): Todo?
@Query("SELECT * FROM todo")
fun getTodos(): Flow<List<Todo>>
}
インタフェース形式に設定!
宣言(@)を使用して、@Insert、@Update、@Delete機能を有効にします.
別のクエリー文を使用する場合は、@Query("クエリー文")で作成できます.
@Database(
entities = [Todo::class],
version = 1
)
abstract class TodoDatabase: RoomDatabase() {
abstract val dao: TodoDao
}
抽象クラスとして作成し、データベース・アシスタントを使用
上記のバージョンでは、後でアプリケーションを更新すると、テーブルの構造が変わります.
昔のテーブルと区別するためと考えられます!
ここでDaoにアクセスするので、Daoを返す抽象的な方法を使ったり、変数を使ったりすることができます!
@Database(entities = arrayOf(RoomCalendar::class), version = 1, exportSchema = false)
abstract class RoomHelper: RoomDatabase() {
abstract fun roomCalendarDao(): RoomCalendarInterface
companion object{
private var instance: RoomHelper?= null
@Synchronized
fun getInstance(context: Context): RoomHelper? {
if (instance == null) {
synchronized(RoomHelper::class) {
instance = Room.databaseBuilder(
context.applicationContext,
RoomHelper::class.java,
"room-helper"
).build()
}
}
return instance
}
}
}
上のコードは、RoomDatabaseを宣言する際にDBを単輪で初期化するコードです!//in mainActivity
helper = RoomHelper.getInstance(mainActivity)!!
helper.roomCalendarDao().getAll()
Activityは1行のコードで簡単にDBを作成してアクセスできます!上記の方法がなければ書くたびにジェネレータを作成してcontext~に入れます.😂
依存注入(di)を使ってコードを書く必要はありません!
次の記事では依存項目についてお話しします!
Reference
https://developer.android.com/training/data-storage/room
https://velog.io/@gang_shik/Android-Room
https://velog.io/@dev_jin/AndroidKotlin-Room
https://velog.io/@hyunho058/Room
https://velog.io/@l2hyunwoo/Android-JetPack-Room
Reference
この問題について(アンドロイドルームにデータを格納(スタジオ)), 我々は、より多くの情報をここで見つけました https://velog.io/@jeongjaino/안드로이드-방-안에-데이터-저장하기-Roomテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol