Android App

Room Database in Android Studio

YunSeong 2021. 11. 27. 20:33
728x90
반응형

https://youtu.be/jXzVrK4DXwU

1. 라이브러리

1
2
3
4
5
dependencies {
            ...
    implementation 'androidx.room:room-runtime:2.2.6'
    annotationProcessor 'androidx.room:room-compiler:2.2.6'
}
cs

위와 같이 room에 대한 라이브러리를 추가해준다. 

사실 Alt + Enter를 통해서 자동으로 연결할 수도 있다.


2. User.java (Entity)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.example.roomdatabaseexample;
 
import androidx.room.Entity;
import androidx.room.PrimaryKey;
 
@Entity
public class User {
    @PrimaryKey(autoGenerate = true//자동으로 아래 id를 생성함
    private  int id = 0;  //하나의 사용자에 대한 고유 ID 값
 
    private String name;
    private String age;
    private String phoneNumber;
 
    ...
}
 
cs

6 - @Entity를 통해서 이 class의 역할을 정한다.

8~9 - @PrimaryKey를 통해서 id라는 변수가 각각의 데이터에 접근할 수 있는 요소로 설정해준다.

11~13 - 저장하기를 원하는 정보를 담을 변수를 선언한다.

15 - 각각의 변수에 Getter, Setter를 생성한다.


3. UserDao.java (Dao)

Dao는 Data Access Object로 데이터베이스에 접근하게 해주는 인터페이스이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.example.roomdatabaseexample;
 
import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;
 
import java.util.List;
 
@Dao
public interface UserDao {
 
    @Insert
    void setInsertUser(User user);
 
    @Update
    void setUpdateUser(User user);
 
    @Delete
    void setDeleteUser(User user);
 
    @Query("SELECT * FROM User")
    List<User> getUserAll();
 
}
 
cs

11 - @Dao를 이용해 이 interface의 역할을 설정한다.

14~21 - "@~~"를 이용해서 함수의 역할을 정하는 듯하다.

23~24 - @Query()를 이용해서 무궁무진한 interface 함수를 만들 수 있는 듯하다. 여기서는 User 안에 있는 모든 요소를 List로 반환하는 함수이다.


4. UserDatabase.java (Database)

1
2
3
4
5
6
7
8
9
package com.example.roomdatabaseexample;
 
import androidx.room.Database;
import androidx.room.RoomDatabase;
 
@Database(entities = {User.class}, version = 1)
public abstract class UserDatabase extends RoomDatabase {
    public abstract UserDao userDao();
}
cs

6 - @Database를 통해서 이 class의 역할을 정한다.

    entities = ~~를 통해서 아까 만든 class를 연결해준다.

    version = ~~를 통해서 이 Database의 버전을 정한다.

8 - Dao를 설정해주는 듯하다.

 

데이터베이스의 이름Entity의 이름을 따른다.


5. MainActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package com.example.roomdatabaseexample;
 
import ...
 
public class MainActivity extends AppCompatActivity {
 
    private UserDao mUserDao;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        UserDatabase database = Room.databaseBuilder(getApplicationContext(), UserDatabase.class"RoomDatabaseExample")
                .fallbackToDestructiveMigration() //database 버전 변경 가능
                .allowMainThreadQueries() // Main Tread에서 DB에 IO를 가능하게 함
                .build();
 
        mUserDao = database.userDao(); //인터페이스 객체 할당
 
        ////////////////////////////////예시////////////////////////////////
        User user = new User();
        user.setAge("20");
        user.setName("Yunseong");
        user.setPhoneNumber("01012312312");
 
        mUserDao.setInsertUser(user);
 
        List<User> userList = mUserDao.getUserAll();
        for (int i = 0; i < userList.size(); i++) {
            Log.d("TEST", userList.get(i).getName() + "\n"
                    + userList.get(i).getAge() + "\n"
                    + userList.get(i).getPhoneNumber());
 
        }
 
        User user2 = new User();
        user2.setId(1);
        user2.setAge("23");
        user2.setName("Yunseong");
        user2.setPhoneNumber("01043214312");
        mUserDao.setUpdateUser(user2);
 
 
        User user3 = new User();
        user3.setId(2);
        mUserDao.setDeleteUser(user3);
    }
}
cs

14~17 - UserDatabase의 객체를 만들고 간단한 설정을 한다.

19 - UserDao의 객체를 생성한다.

ex)

22~27 - user을 database에 저장한다.

29~35 - database를 받아와서 출력한다.

37~42 - user을 user2로 대체한다.

45~47 - id가 2인 원소를 삭제한다.

728x90
반응형