ルームをランダムに使用
「AndroidロボットはGoogleが作成したもので、私たちが共有している作品をコピーまたは修正するために使用され、Creative Commons 3.0の著者マークライセンスの条項と条件に従って使用されます.」
AndroidでDBを使う方法は2つあります. DB外部サーバとの通信 ローカルDB(SQLite) を使用
通常、OracleまたはMySQLが使用されます.
なぜアンドロイドには違う使い方があるのでしょうか.
アンドロイドはデータベースを直接バインドできません.
セキュリティ上の問題のため、Oracleなどのデータベースに直接関連付けることはできません.
逆に、SQLiteを内部データベースとして利用する方法を提供します.
この方法をさらに発展させたのはRoomである.
詳細は公式文書を参考にすることができます.
ルームを使用するには、3つのコンポーネントを作成する必要があります. Entity
簡単に言えばTable DAO
これはCRUD行列を定義するインタフェースです.
スタジオの紹介で、簡単に実現できました. RoomDatabase
データベースハンドルを含む抽象クラスで、データベースに接続するためのさまざまなsetup.
デザインシートのように記入すればいいです.
AutoGenerateを指定すると、キー値は自動的に1ずつ増加します.
省略すると、変数の名前で保存されます.
Insert、Update、Deleteはツールによって実現されます.
パラメータとして入力されたentityを処理します.
今必要なものは全部できましたから、使いましょう.
ちなみに、スタジオを実行するときは非同期処理を行います.
メインスレッドで実行する場合
次は同じ赤いExceptionです.
筆者は例としてThreadを用いた.
通常または他の方法を使用することもできます.
ちなみにAsyncTaskはAndroid 11からDepentedなので気をつけましょう.
個人学習をベースに書いているからです.
情報が正しくない可能性があります.
知っていたら後で修正します
いつでもフィードバックを歓迎します.
読んでくれてありがとう.
概要
AndroidでDBを使う方法は2つあります.
通常、OracleまたはMySQLが使用されます.
なぜアンドロイドには違う使い方があるのでしょうか.
アンドロイドはデータベースを直接バインドできません.
セキュリティ上の問題のため、Oracleなどのデータベースに直接関連付けることはできません.
逆に、SQLiteを内部データベースとして利用する方法を提供します.
この方法をさらに発展させたのはRoomである.
詳細は公式文書を参考にすることができます.
インプリメンテーション
ルームを使用するには、3つのコンポーネントを作成する必要があります.
簡単に言えばTable
これはCRUD行列を定義するインタフェースです.
スタジオの紹介で、簡単に実現できました.
データベースハンドルを含む抽象クラスで、データベースに接続するためのさまざまなsetup.
Entity
@Entity
data class RoomEntity(
@PrimaryKey(autoGenerate = true) var id: Int,
@ColumnInfo(name = "test_value") var testValue: String
)
彼らにこれが結末であることを知らせます.デザインシートのように記入すればいいです.
@PrimaryKey
PrimaryKeyのアシスタントを指定します.AutoGenerateを指定すると、キー値は自動的に1ずつ増加します.
@ColumnInfo
データベースに格納するカラム名を宣言する方法です.省略すると、変数の名前で保存されます.
DAO
@Dao
interface RoomDAO {
@Query("SELECT * FROM RoomEntity")
fun selectRoom() : List<RoomEntity>
@Insert
fun insertRoom(entity: RoomEntity)
@Update
fun updateRoom(entity: RoomEntity)
@Delete
fun deleteRoom(entity: RoomEntity)
}
CRUDマトリクスの挿入、削除などのインタフェースを定義します.Insert、Update、Deleteはツールによって実現されます.
パラメータとして入力されたentityを処理します.
Database
@Database(entities = [RoomEntity::class], version = 1, exportSchema = true)
abstract class MyRoomDatabase : RoomDatabase() {
abstract fun getRoomDAO() : RoomDAO
companion object {
private var instance: MyRoomDatabase? = null
fun getInstance(context : Context) : MyRoomDatabase {
instance?.let {
return it
} ?: run {
instance = Room.databaseBuilder(
context.applicationContext,
MyRoomDatabase::class.java,
"testRoom.db"
).build()
return instance!!
}
}
}
}
Activity
今必要なものは全部できましたから、使いましょう.
// UI init.
binding.apply {
btnRoom.setOnClickListener {
Thread {
Snackbar.make(it, "저장되었습니다.", Snackbar.LENGTH_SHORT).show()
val dao = MyRoomDatabase.getInstance(this@RoomActivity).getRoomDAO()
dao.insertRoom(
RoomEntity(0, edtRoom.text.toString())
)
val entityList = dao.selectRoom()
runOnUiThread {
tvRoom.text = ""
entityList.forEach {
tvRoom.text = tvRoom.text.toString().plus("\r\n ${it.testValue}")
}
}
}.start()
}
}
以下に示すように、正常に動作していることがわかります.ちなみに、スタジオを実行するときは非同期処理を行います.
メインスレッドで実行する場合
次は同じ赤いExceptionです.
java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.
// DB 작업이 많을 경우 UI가 멈출 수 있기 때문에 메인스레드에서 실행하는 것은 지양해야한다.
ええと筆者は例としてThreadを用いた.
通常または他の方法を使用することもできます.
ちなみにAsyncTaskはAndroid 11からDepentedなので気をつけましょう.
個人学習をベースに書いているからです.
情報が正しくない可能性があります.
知っていたら後で修正します
いつでもフィードバックを歓迎します.
読んでくれてありがとう.
Reference
この問題について(ルームをランダムに使用), 我々は、より多くの情報をここで見つけました https://velog.io/@jeep_chief_14/Room-무작정-사용해보기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol