반응형
Notice
Recent Posts
Recent Comments
Link
불로구
안드로이드 스튜디오 - 내장 데이터베이스 ROOM 본문
반응형
Room
- Jetpack 프로젝트에서 제공하는 DB 라이브러리
- SQLite에 대한 추상화 레이어 지원
Room 구조
- 데이터베이스 : 데이터베이스 폴더를 포함해 앱의 지속적인 관계형 데이터의 기본 연결을 위한 기본 엑세스 포인트
-> RoomDatabase를 확장하는 추상 클래스여야 함
-> 주석 내에 데이터베이스와 연결된 항목의 목록을 포함해야 함
-> 인수가 0개인 @Dao로 주석이 지정된 클래스를 반환하는 추상 메서드를 포함해야 함
-> 런타임 시 Room.databaseBuilder() or Room.inMemoryDatabaseBuilder()를 호출하여 Database 인스턴스 가져옴
- 항목 : 데이터베이스 내 테이블
- DAO : 데이터베이스에 엑세스하는 데 사용되는 메서드 포함
참고
- 앱이 단일 프로세스에서 실행되면 AppDatabase 객체를 인스턴스화 시 싱글톤 패턴 적용 ( 각 RoomDatabase 인스턴스는 리소스를 많이 소모함 )
- 앱이 여러 프로세스에서 실행되면 데이터베이스 빌더 호출에 enableMultiInstanceInvalidation()을 포함
적용법
1. Dependencies
implementation 'androidx.room:room-runtime:2.2.6'
annotationProcessor "androidx.room:room-compiler:2.2.6"
2. Entity ( Todo.class )
package com.example.javaroom;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
@Entity
public class Todo {
@PrimaryKey
private int uid;
@ColumnInfo(name = "title")
private String title;
@ColumnInfo(name = "content")
private String content;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("uid : " + uid + " , ");
sb.append("title : " + title + " , ");
sb.append("content : " + content + " , ");
return sb.toString();
}
}
3. DAO ( TodoDAO.class )
package com.example.javaroom;
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();
@Query("SELECT * FROM Todo WHERE uid IN (:uid_Num)")
Todo getByUid(int uid_Num);
@Query("SELECT uid FROM todo ORDER BY uid DESC LIMIT 1")
int getUid();
@Insert
void insert_Todo(Todo todo);
@Update
void update_Todo(Todo todo);
@Query("DELETE FROM Todo WHERE uid IN (:uid_num)")
void delete_Todo(int uid_num);
@Delete
void delete_Todo(Todo todo);
@Query("DELETE FROM Todo")
void deleteAll();
}
4. DB ( AppDatabase.class )
package com.example.javaroom;
import androidx.room.Database;
import androidx.room.RoomDatabase;
@Database(entities = {Todo.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract TodoDAO todoDAO();
}
5. MainActivity
package com.example.javaroom;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.AppCompatButton;
import androidx.room.Room;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private EditText todo_title;
private Button add_Button;
private EditText todo_content;
private TextView result_Text;
private Button del_Button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
todo_title = findViewById(R.id.todo_Edit);
add_Button = findViewById(R.id.add_Button);
todo_content = findViewById(R.id.todo_content);
result_Text = findViewById(R.id.result_text);
del_Button = findViewById(R.id.del_Button);
final AppDatabase db = Room.databaseBuilder(this, AppDatabase.class, "todo-db")
.allowMainThreadQueries()
.build();
result_Text.setText(db.todoDAO().getAll().toString());
add_Button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Todo todo = new Todo();
int last_Uid = db.todoDAO().getUid() + 1;
if(last_Uid <= 0){
last_Uid = 1;
}
todo.setUid((last_Uid));
todo.setTitle(todo_title.getText().toString());
todo.setContent(todo_content.getText().toString());
db.todoDAO().insert_Todo(todo);
result_Text.setText(db.todoDAO().getAll().toString());
}
});
del_Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
db.todoDAO().deleteAll();
result_Text.setText("");
}
});
}
}
반응형
'프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 - 안전하게 암호화 하기 (0) | 2021.11.01 |
---|---|
안드로이드 스튜디오 - DataBinding & LiveData (0) | 2021.04.06 |
안드로이드 스튜디오 - 계산기 만들기(실수, 타이머) (0) | 2020.06.15 |
Comments