안녕하세요 코딩 초밥입니다 ㅇㅅㅇ
오늘은 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 |
댓글