안드로이드/데이터 입출력
안드로이드 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