본문 바로가기

Android

[Android] DB를 이용한 데이터 저장 방법 room

https://www.youtube.com/watch?v=97xmJRZRGm4&list=PLxTmPHxRH3VXHOBnaGQcbSGslbAjr8obc&index=2

출처: 오준석의 생존코딩 - 모던 안드로이드

*Room - sqlite를 대체할 수 있는 database

 

* 할 일을 저장하는 어플 예제 (언어: java)

- DB사용을 위해서 

1. Todo 객체를 만든다 

2. Room library 추가

3. id를 primary key로 지정하기 위해서 @primaryKey(autoGenerate = true) 어노테이션 추가 

4. 이것을 room에서 사용하기 위한 개체로 만들기 위해서 @Entitiy 어노테이션 추가 => 모델 준비 끝

5. Data access object인 Dao객체를 만들기 위해서 인터페이스 TodoDao를 만들고 @Dao 어노테이션 추가

6. Dao 인터페이스에 Todo 테이블에 대해서 어떤 동작을 할 것인지 정의

7. 함수에 @Query("sql문") 어노테이션을 붙여 sql문을 작성, insert를 하고 싶으면 @Insert, update를 하고싶으면 @Update, delete를 위해선 @Delete 어노테이션을 추가.

8. 데이터 베이스 개체 abstract class Database를 정의. @Databse(entities = {Todo.class},version=1) 어노테이션을 추가.멤버로 TodoDao를 가지며 이를 통해 Todo를 조작.

 

- 이제 액티비티에서 

1. Appdatabase db = Room.databaseBuilder(this, Appdatabase.class, "todo-db").build()로 데이터 베이스 객체를 만듦.

2. db는 백그라운드에서 동작하지 않으면 오류가남.

3. 메인스레드에서 동작하도록 만들려면 allowMainThreadQueries()함수를 씀. (학습용일때 사용)

4. db.todoDao().getAll().toString()으로 모든 Todo받아옴.

5. db.todoDoa().insert(new Todo(~~)) 으로 insert

 

 

*코틀린의 경우는

1. 라이브러리 추가시에 implementation 대신에 kapt사용

2. kapt사용을 위해선 apply plugin: 'kotlin- kapt'

3. Todo 객체 -> data calss Todo() 로 만들어줌

3. 이외 나머지 문법적인 요소들 수정.