쏭식
Ssongcode;
쏭식
전체 방문자
오늘
어제
  • 분류 전체보기 (106)
    • JAVA (21)
      • Basic (21)
    • Kotlin (14)
      • Basic (14)
    • Android (64)
      • Basic (24)
      • JETPACK (30)
      • Compose (8)
      • 파고들기 (2)
    • Project (4)
    • etc (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Kotlin
  • Android
  • ViewModel
  • 코테
  • 변수
  • 알고리즘
  • 자료구조
  • 객체지향
  • 기초100제
  • livedata
  • 코틀린코테
  • 상속
  • 메소드
  • AAC
  • workmanager
  • compose
  • 프로젝트회고
  • Room
  • 컴포즈
  • 배열
  • 리사이클러뷰
  • Adapter
  • Jetpack
  • DataBinding
  • 코딩테스트
  • mvvm
  • 코드업100제
  • 코틀린
  • 자바
  • 백준

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쏭식

Ssongcode;

Android/JETPACK

[JETPACK개론] SQLite(1)

2022. 8. 29. 23:59

앱을 이용하다보면 네트워크가 끊겼을 때 네트워크 오류입니다. 다시 시도해 주세요 라는 메세지를 본 적이 있다.

하지만 카카오톡 채팅방처럼 네트워크가 연결되어 있지 않은 상황에서도 잘 보이고 있는 것을 알 수 있다.

 

서버에서 불러오는 방식일 수도 있지만 다른 곳에다가 저장을 해두고, 불러오는 방식을 사용할 수 있을 것이다.

우리는 이를 Local DB라고 부르며 SQLite와 Room이 있다.

 

Room은 SQLite를 완벽히 활용하면서 원활한 데이터베이스 엑세스가 가능하도록 하는 업그레이드 버전이라 할 수 있다.

여러 장점이 있지만 반복적이고 오류가 발생하기 쉬운 상용구 코드를 최소화하는 것이 Room의 장점이다.

 

먼저 Room을 공부하기전 SQLite의 개념을 알고, Room을 공부할 예정이다!

 

이 글에서는 SQLite를 사용하기 위한 셋팅에 대해 다뤄보고 다음 글에서 본격적으로 MainActivity에서 어떻게 활용할 수 있는지

포스팅할 예정이다!!

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

    companion object {

        private const val DATABASE_VERSION = 1 //데이터베이스 버전
        private const val DATABASE_NAME = "myTestDB.db" //데이터베이스 이름
        private const val TBL_NAME = "my_table" //테이블이름

        private const val ID = "id"
        private const val TITLE = "title"

    }

위와 같이 처음 데이터베이스의 버전과, 데이터베이스 이름, 그리고 테이블 이름, 테이블에 들어갈 컬럼들을 정의한다.

또한 위와 같이 class를 선언하면 테이블을 생성하는 onCreate와, 테이블의 버전을 업그레이드하는 onUpgrade의 함수를

오버라이드해서 새로 정의해야한다.

//테이블 만드는 구문
override fun onCreate(db: SQLiteDatabase?) {

    val SQL_CREATE_ENTRIES =
        "CREATE TABLE $TBL_NAME (" +
                "$ID INTEGER PRIMARY KEY," +
                "$TITLE TEXT)"

    db?.execSQL(SQL_CREATE_ENTRIES)

}

따라서 위와 같이 onCreate를 재정의하여 ID라는 기본키와 TITLE이라는 컬럼을 가지는 테이블을 만드는 함수를 만들었다.

// DATABASE VERSION 바뀔 때 기존 데이터베이스 버전에서 지워주는 작업을 함
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {

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

}

또한, 위처럼 Upgrade함수도 재정의 해주었다.

다음 이제 테이블의 행에 insert, 전체 행을 불러오는 select, 행 전체를 삭제하는 delete문을 구현해보자.

fun insert(str : String) {

    val db = this.writableDatabase

    val values = ContentValues().apply {
        put(TITLE, str) //TITLE의 값에 str을 넣겠다.
    }

    db.insert(TBL_NAME, null, values)

}

여기서 TITLE은 위에서 추가한 컬럼을 의미하고 str은 넣으려고 하는 값을 의미한다.

fun getAllData() : ArrayList<String> {

    val db = this.readableDatabase
    val query = "SELECT * FROM $TBL_NAME"

    val cursor = db.rawQuery(query, null)

    val arr = ArrayList<String>()

    with(cursor) {
        while (moveToNext()) {
            arr.add(getString(1)) //값을 하나씩 넣어줌
            //이는 ID값은 아니고, TITLE값을 의미함
        }
    }

    return arr
}

위는 cursor가 끝날 때 까지 다음 행으로 넘기면서 ID값은 넣지 않고, getString(1)을 통해 TITLE값을 arr에 넣고 반환하여

테이블의 모든 행을 출력한다.

fun deleteAll(){

    val db = this.writableDatabase
    db.execSQL("DELETE FROM $TBL_NAME")

}

DELETE를 통해 테이블의 전체 행을 삭제하는 함수를 만들어준다!

 

이로써 SQLite를 이용하기 위한 준비가 완료되었고, 다음 글에서 MainActivity에서 어떻게 활용할 수 있는지 포스팅할 예정이다!

 

 

GitHub - SsongSik/JetPack_Android_Practice: Android practice using the Jetpack library

Android practice using the Jetpack library. Contribute to SsongSik/JetPack_Android_Practice development by creating an account on GitHub.

github.com

 

저작자표시 (새창열림)

'Android > JETPACK' 카테고리의 다른 글

[JETPACK개론] ROOM(1)  (0) 2022.09.02
[JETPACK개론] SQLite(2)  (0) 2022.08.30
[JETPACK개론] Retrofit + ViewModelScope + RV + Glide  (0) 2022.08.28
[JETPACK개론] Retrofit 예제 + RecyclerView  (0) 2022.08.27
[JETPACK개론] Coroutine / ViewModelScope  (0) 2022.08.26
    'Android/JETPACK' 카테고리의 다른 글
    • [JETPACK개론] ROOM(1)
    • [JETPACK개론] SQLite(2)
    • [JETPACK개론] Retrofit + ViewModelScope + RV + Glide
    • [JETPACK개론] Retrofit 예제 + RecyclerView
    쏭식
    쏭식

    티스토리툴바