안드로이드/데이터 입출력

안드로이드 sqlite 2

김어찐 2022. 6. 23. 00:11
728x90

안드로이드는 SQLite 데이터 베이스 사용시 직접 쿼리문을 작성하는 것 뿐만 아니라 제공되는 클래스를 이용하는 방법을 제공하고 있다.
코드 구현은 대부분 비슷하며 쿼리문 작성 대신에 클래스를 사용하면 된다.

 

 

ContentValue

클래스를 이용하는 방법을 사용할 때 가장 중요한 클래스이다.
ContentValue 클래스는 값을 저장할 때 이름을 부여하는 클래스로써 값을 저장할 때 사용하는 이름은 테이블의 컬럼이름과 매칭된다.
ContentValue에  저장한 데이터는 테이블의 컬럼과 매칭되어 insert, update 등에 사용된다.

 

package com.example.sqlite2

import android.content.ContentValues
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
import java.text.SimpleDateFormat
import java.util.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        button.setOnClickListener {
            val helper = DBHelper(this)

            // 데이터 준비
            val sdf = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
            val now = sdf.format(Date())

            // 컬럼에 저장될 데이터를 관리하는 객체
            val cv1 = ContentValues()
            cv1.put("textData","문자열1")
            cv1.put("intData","100")
            cv1.put("floatData",11.11)
            cv1.put("dateData",now)

            helper.writableDatabase.insert("TestTable",null,cv1)

            val cv2 = ContentValues()
            cv2.put("textData","문자열2")
            cv2.put("intData","200")
            cv2.put("floatData",22.22)
            cv2.put("dateData",now)

            helper.writableDatabase.insert("TestTable",null,cv2)

            helper.writableDatabase.close()

            textView.text = "저장완료"
        }

        button2.setOnClickListener { 
            val helper = DBHelper(this)

            // 첫 번쨰 : 가져올 데이터가 있는 테이블 이름
            // 두 번째 : 가져올 컬림의 이름이 담겨져 있는 문잗열 배열, null일 경우에는 모는 컬럼
            // 세 번째 : 조건절 (idx = ? and name = ?), 조건절이 필요가 없으면 null
            // 네 번째 : 조건절 ? 에 바인딩 될 값 배열, 세 번째가 null이면 여기도 null
            // 다섯 번째 : group by 기준 칼럼
            // 여섯 번째 : having 절에 들어갈 조건문
            // 일곱 번째 : 정렬 기준

            val c1 = helper.writableDatabase.query("TestTable",null,null,null,null,null,null)

            textView.text = ""

            while (c1.moveToNext()) {
                val idx1 = c1.getColumnIndex("idx")
                val idx2 = c1.getColumnIndex("textData")
                val idx3 = c1.getColumnIndex("intData")
                val idx4 = c1.getColumnIndex("floatData")
                val idx5 = c1.getColumnIndex("dateData")

                val idx = c1.getInt(idx1)
                val textData = c1.getString(idx2)
                val intData = c1.getInt(idx3)
                val floatData = c1.getDouble(idx4)
                val dateData = c1.getString(idx5)

                textView.append("idx :$idx\n")
                textView.append("textData : $textData\n")
                textView.append("intData : $intData\n")
                textView.append("floatData : $floatData\n")
                textView.append("dateData : $dateData\n\n")
            }
            helper.writableDatabase.close()
        }

        button3.setOnClickListener {
            val helper = DBHelper(this)

            val cv = ContentValues()
            cv.put("textData","문자열")

            val where = "idx = ?"
            val args = arrayOf("1")

            // 테이블 명, ContentValues, 조건절, 조건절 "?" 에 반딩 될 값 배열
            helper.writableDatabase.update("TestTable",cv,where,args)
            helper.writableDatabase.close()

            textView.text = "수정완료"

        }
        button4.setOnClickListener {
            val helper = DBHelper(this)

            val where = "idx = ?"
            val args = arrayOf("1")

            // 테이블 명, 조건절, 조건절 "?" 에 반딩될 값 배열
            helper.writableDatabase.delete("TestTable",where,args)
            helper.writableDatabase.close()

            textView.text = "삭제완료료"
        }    }
}

 

 

package com.example.sqlite2

import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper

class DBHelper : SQLiteOpenHelper {
    constructor(context: Context) : super(context, "Test.db",null,1)

    override fun onCreate(db: SQLiteDatabase?) {
        val sql = """
            create table TestTable
            (idx integer primary key autoincrement,
            textData text not null,
            intData integer not null,
            floatData real not null,
            dateData date not null)
        """.trimIndent()

        db?.execSQL(sql)
    }

    override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
        TODO("Not yet implemented")
    }
}

 

728x90