상세 컨텐츠

본문 제목

[안드로이드 코틀린] SQLite ToDo List 만드는 방법 part1 - Data 클래스와 DB 클래스

안드로이드

by aries574 2022. 9. 14. 19:47

본문


이번 시간에는 ToDo List 만들기 첫 번째 시간 Data 클래스DB 클래스를 만들어 보겠습니다. 


목차

1. 라이브러리 등록
2. ToDo 클래스 ToDoModel.kt
3. ToDo DB 클래스 ToDoDB.kt


1. 라이브러리 등록

build.gradle(Module:프로젝트명:app)

dependencies 괄호 안에 아래 코드를 넣어주시면 됩니다.

implementation 'com.google.android.material:material:1.6.1'

implementation 'com.github.xabaras:RecyclerViewSwipeDecorator:1.4'

 

라이브러리 문서

https://github.com/xabaras/RecyclerViewSwipeDecorator

 

GitHub - xabaras/RecyclerViewSwipeDecorator: A simple utility class to add a background, an icon and a label while swiping a Rec

A simple utility class to add a background, an icon and a label while swiping a RecyclerView item left or right. - GitHub - xabaras/RecyclerViewSwipeDecorator: A simple utility class to add a backg...

github.com

 

setting.gradle

dependencyResolutionManagement -> repositories 괄호 안에 아래 코드를 넣어주시면 됩니다.

maven { url 'https://jitpack.io' }


2. ToDo 클래스 ToDoModel.kt

 - 설명 -

 1. 데이터를 담을 클래스입니다. 

 2. id:

   할일 ID

 3. task

   할 일

 4. status 

   할 일 체크 상태 값

data class ToDoModel(

    var id: Int,
    val task: String,
    val status: Int
)

 


3. ToDo DB 클래스 ToDoDB.kt

- 설명 -

 1. 데이터를 조회, 등록, 수정, 삭제하는 클래스입니다. 

 2. onCreate(db: SQLiteDatabase?)

   데이터 저장할 테이블 생성

 3. openDatabase

   데이터베이스 쓰기 모드

 4. getAllTasks(): ArrayList<ToDoModel>

   할 일 목록 가져오는 함수

 5. addTask(task: ToDoModel)

   할일 등록하는 함수

 6. updateStatus(id: Int, status: Int)

   할 일 상태값 수정하는 함수

 7. updateTask(id: Int, task: String?)

   할일 수정하는 함수

 8. deleteTask(id: Int)

   할일 삭제하는 함수

class ToDoDB(context: Context) :
    SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION){

    private var db: SQLiteDatabase? = null

    companion object{

        private const val DATABASE_NAME = "todo_list.db"
        private const val DATABASE_VERSION = 1

        private const val TABLE_NAME  = "todo_list"
        private const val ID = "id"
        private const val TASK = "task"
        private const val STATUS = "status"
    }

    /**
     * DB 생성
     */
    override fun onCreate(db: SQLiteDatabase?) {

        val query = "CREATE TABLE $TABLE_NAME ( $ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
                " $TASK TEXT, $STATUS INTEGER)"

        db?.execSQL(query)
    }

    /**
     * 업그레이드
     */
    override fun onUpgrade(p0: SQLiteDatabase?, p1: Int, p2: Int) {

        db?.execSQL("DROP TABLE IF EXISTS $TABLE_NAME")
        onCreate(db)
    }

    /**
     * DB 쓰기
     */
    fun openDatabase(){
        db = this.writableDatabase
    }

    /**
     * 할 일 전체 가져오기
     */
    fun getAllTasks(): ArrayList<ToDoModel>{

        //초기화
        val taskList: ArrayList<ToDoModel> = ArrayList()
        var cursor: Cursor? = null
        var query = "SELECT * FROM $TABLE_NAME"

        //읽기
        db = this.readableDatabase

        if(db != null){

            cursor = db!!.rawQuery(query, null)

            while(cursor.moveToNext()){

                //담기
                val task = ToDoModel(cursor.getInt(0), cursor.getString(1), cursor.getInt(2))

                //리스트에 추가
                taskList.add(task)
            }
        }

        return taskList
    }

    /**
     * 할 일 추가
     */
    fun addTask(task: ToDoModel){

        openDatabase()

        val cv = ContentValues()
        cv.put(TASK, task.task)
        cv.put(STATUS, 0)
        db!!.insert(TABLE_NAME, null, cv)
    }

    /**
     * 할 일 상태 수정
     */
    fun updateStatus(id: Int, status: Int){

        openDatabase()

        val cv = ContentValues()
        cv.put(STATUS, status)
        db!!.update(TABLE_NAME, cv, "id=?", arrayOf(id.toString()))
    }

    /**
     * 할 일  수정
     */
    fun updateTask(id: Int, task: String){

        openDatabase()

        val cv = ContentValues()
        cv.put(TASK, task)
        db!!.update(TABLE_NAME, cv, "id=?", arrayOf(id.toString()))
    }

    /**
     * 할 일 삭제
     */
    fun deleteTask(id: Int){

        openDatabase()

        db!!.delete(TABLE_NAME,  "id=?", arrayOf(id.toString()))
    }
}

2022.09.13 - [안드로이드] - [안드로이드 코틀린] 액티비티(Activity) 뒤로 가기 버튼 만드는 방법

 

[안드로이드 코틀린] 액티비티(Activity) 뒤로가기 버튼 만드는 방법

이번 시간에는 액티비티(Activity) 이동 후에 다시 이전 화면으로 돌아가는 방법을 알아보겠습니다. 목차 1. 실행 화면 2. 액티비티 만들기 3. 환경 설정 파일 AndroidManifest.xml 4. 메인 화면 acti

aries574.tistory.com

2022.09.09 - [안드로이드] - [안드로이드 코틀린] HTTP 통신 Volley 사용법 part1 - 간단한 요청 및 응답

 

[안드로이드 코틀린] HTTP 통신 Volley 사용법 part1 - 간단한 요청 및 응답

HTTP통신으로 데이터를 쉽게 가져올 수 있는 Volley 사용법을 알아보겠습니다. 이번 시간에는 String형식의 값을 가져오는 방법을 알아보겠습니다. 목차 1. 실행 화면 2. 권한 등록 3. 라이브러리 

aries574.tistory.com

2022.09.08 - [안드로이드] - [안드로이드 코틀린] 달력(DatePicker) 코드에서 호출하는 방법

 

[안드로이드 코틀린] 달력(DatePicker) 코드에서 호출하는 방법

이번 시간에는 달력(DatePicker)을 화면이 아니라 코드에서 호출하는 방법을 알아보겠습니다. 목차 1. 실행 화면 2. 메인 화면 activity_main.xml 3. 메인 코드 MainActivity.kt 1. 실행 화면 2. 메인..

aries574.tistory.com

 

 

반응형

관련글 더보기

댓글 영역