본문 바로가기
이과/JAVA 안드로이드

[안드로이드]Room

by 코딩초밥 2021. 4. 25.
반응형

안녕하세요 코딩 초밥입니다 ㅇㅅㅇ

오늘은 database를 이용하는 room에 대해서 알아보도록 하겠습니다

룸은 3개의 주요 Component로 구성된 걸 알아야 합니다

Entity: 데이터 베이스의 보유자로서 데이터베이스 안에 있는 테이블을 표현합니다

Database: 데이터베이스를 의미합니다

DAO(Data Access Object): 데이터베이스에 접근하는 메소드들이 있습니다. 해당 메소드에 대한 SQLite 쿼리는 직접 작성하여야 합니다.

 

 

Entity

데이터 구조를 표현하기 위한 클래스입니다. DBMS에 이용되기 위한 데이터를 위한 클래스입니다.

@Entiry 어노테이션으로 표현되는 클래스

클래스 내에 @PrimaryKey,@Columninfo등의 어노테이션으로 변수 선언

DAO

실세 DBMS를 위해 호출되는 함수를 선언하는 인터페이스나 추상 클래스입니다.

우리는 인터페이스나 추상 클래스만 정의합니다. 인터페이스나 추상 클래스를 구현해

DBMS를 수행하는 코드는 자동으로 만들어집니다.

@DAO 어노테이션으로 선언

@Quert,@Insert,@Delete등의 어노테이션으로 함수선언

 

Database

데이터베이스 이용을 위한 Dao객체 획득 함수를 제공하는 클래스입니다

Dao 획득 함수는 추상 함수로 정의하며 데이터베이스를 이용하기 위해 가장 먼저 호출됩니다.

@Database어노테이션으로 만드는 클래스

추상 클래스로 작성

Entity를 어노테이션 매개변수로 지정.

 

 

순서

*시작전 ROOM dependencies를 추가시켜줍니다

1. 원하는 xml 형식을 만듭니다.
2. 데이터베이스에 넣을 @ Entity의 class를 만듭니다. (getter setter)

3. Enity class에 접근하기 위한 @Dao interface객체를 만듭니다.

4. RoomDatabase 상복받은 Database 객체를 하나 정의를 한다.

 

1. 원하는 xml 형식을 만듭니다.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="원하는데이타"
        android:id="@+id/ET_TEXT"/>
    <Button
        android:text="추가버튼"
        android:layout_below="@id/ET_TEXT"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/btn"
        ></Button>
    <TextView
        android:text="보여지는 뷰"
        android:layout_below="@id/btn"
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></TextView>

</RelativeLayout>

2. 데이터베이스에 넣을 @ Entity의 class를 만듭니다. (getter setter)

 

package com.kim9212.myapplication;

import androidx.room.Entity;
import androidx.room.PrimaryKey;

//꼭만들어야함
@Entity
public class todo {

    //아이디를 내가 직접주지않고 알아서 하는 코드
    @PrimaryKey(autoGenerate =  true)
    private int id;
    private String title;

    public todo(String title) {
        this.title = title;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    @Override
    public String toString() {
        return "todo{" +
                "id=" + id +
                ", title='" + title + '\'' +
                '}';
    }
}

3. Enity class에 접근하기 위한 @Dao interface객체를 만듭니다.

package com.kim9212.myapplication;

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 TodoDao {
    @Query("SELECT * FROM todo")
    List<todo> getAll();

    @Insert
    void insert(todo todo);

    @Update
    void  update(todo todo);
    @Delete
    void delet(todo todo);
}

4.RoomDatabase 상복받은 Database 객체를 하나 정의를 한다.

package com.kim9212.myapplication;

import androidx.appcompat.app.AppCompatActivity;
import androidx.room.Room;

import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private EditText mtodoEditText;
    private TextView mResultTextview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mtodoEditText=findViewById(R.id.todo);
        mResultTextview=findViewById(R.id.textView);

        //데이타베이스 객체 db는 무조건 벡그라운드에서
        //하지않으면 에러가납니다 allowmainthread를 쓰면 공부용으로 괜찮다
        //실무는 벡그라운드에서 한다
        final AppDataBase db= Room.databaseBuilder(this,AppDataBase.class,"todo-db")
                .allowMainThreadQueries().build();

        mResultTextview.setText(db.todoDao().getAll().toString());
        
        findViewById(R.id.add_button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                db.todoDao().delet(new todo(mtodoEditText.getText().toString()));
                mResultTextview.setText(db.todoDao().getAll().toString());
            }
        });

    }
}
반응형

'이과 > JAVA 안드로이드' 카테고리의 다른 글

[안드로이드]ViewPaPer  (0) 2021.04.30
[안드로이드]UI/UX 디자인이란?  (0) 2021.04.27
[안드로이드]Thread2  (0) 2021.04.27
[안드로이드]Thread  (0) 2021.04.26
[안드로이드]CompoundButton 활용  (2) 2021.04.25

댓글