SQLite ๋?
SQLite๋ ์คํ ์์ค ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ (RDBMS)์ผ๋ก, ์๊ณ ๊ฒฝ๋ นํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ง์ด๋ค.
์๋ฒ๊ฐ ์๋๋ผ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ฃ์ด ์ฌ์ฉํ๋ ๋น๊ต์ ๊ฐ๋ฒผ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ค.
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(RDBMS)
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(RDBMS)๋ Table ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ค.
์ด ํ ์ด๋ธ์ Key-value์ ๊ด๊ณ๋ฅผ ๋ํ๋ธ๋ค.
๋ฐ์ดํฐ์ ์ข ์์ฑ์ ๊ด๊ณ๋ก ํํํ๋ ๊ฒ์ด ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํน์ง์ด๋ค.
์ข ๋ฅ๋ก๋ MySQL, MSSql, MariaDB, Oracle, H2, sqlite ๋ฑ์ด ์๋ค.
ํน์ง
- ๋ฐ์ดํฐ์ ๋ถ๋ฅ, ์ ๋ ฌ, ํ์ ์๋๊ฐ ๋น ๋ฅด๋ค.
- ์ ๋ขฐ์ฑ์ด ๋๊ณ , ์ด๋ค ์ํฉ์์๋๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๋ค.
- ๊ธฐ์กด์ ์์ฑ๋ ์คํค๋ง๋ฅผ ์์ ํ๊ธฐ ์ด๋ ต๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถํ ๋ถ์์ด ์ด๋ ต๋ค.
์๋๋ก์ด๋์์ SQLite ์ฌ์ฉ์ด์
1. ์๋๋ก์ด๋์์ ์ง์ํ๋ ๋ด์ฅ ๋ฐ์ดํฐ๋ฒ ์ด์ค
SQLite๋ ์๋๋ก์ด๋ ํ๋ซํผ์์ ๋ด์ฅ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ง์๋๋ค.
์๋๋ก์ด๋ ์ฑ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ฒ์ํ๋๋ฐ SQLite๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ด๋ ์๋๋ก์ด๋ ๊ฐ๋ฐ์๊ฐ ๋ณ๋๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฃจ์ ์ ๊ฐ๋ฐํ๊ฑฐ๋ ๊ตฌ๋งคํ ํ์๊ฐ ์์ด์ง๊ธฐ ๋๋ฌธ์,
์ฑ ๊ฐ๋ฐ ์๋์ ํจ์จ์ฑ์ ๋์ผ ์ ์๋ค.
2. ๊ฒฝ๋ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค
SQLite๋ ๊ฒฝ๋ นํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์๋๋ก์ด๋์์ ๋น ๋ฅด๊ฒ ๋์ํ๋ค.
์ด๋ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์ ๊ฐ์ ๋ฆฌ์์ค๊ฐ ์ ํ๋ ํ๊ฒฝ์์๋ ์์ ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฃจ์ ์ ์ ๊ณตํ ์ ์๋๋ก ํด์ค๋ค.
3. ์ฌ์ด ๊ตฌํ๊ณผ ๊ด๋ฆฌ
SQLite๋ ๊ตฌํํ๊ธฐ ์ฝ๊ณ ๊ด๋ฆฌํ๊ธฐ๋ ๊ฐ๋จํ๋ค.
SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง๋ค๊ณ ๊ด๋ฆฌํ๋๋ฐ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๊ตฌ๊ฐ ์๋๋ก์ด๋ ํ๋ซํผ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ค.
์ด๋ ๊ฐ๋ฐ์๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ๊ด๋ฆฌํ๋๋ฐ ๋๋ ์๊ฐ๊ณผ ๋น์ฉ์ ์ค์ผ ์ ์๋ค.
๋จ์
- ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์๋ ์ ํฉํ์ง ์๋ค.
- ๋์์ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ๊ทผํ๋ ํ๊ฒฝ์์๋ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค.
- ์ผ๋ถ ๊ณ ๊ธ ๊ธฐ๋ฅ(์: ์คํ ์ด๋ ํ๋ก์์ )์ ์ง์ํ์ง ์๋๋ค.
- ๋ฐ์ดํฐ ํ์ ์ด ์ ํ์ ์ด๋ฉฐ, ์ ๊ตํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์๋ ํ๊ณ๊ฐ ์๋ค.
์ฌ์ฉ ์์
๋ฐ์ดํฐ ์ฝ์ , ์ ์ฒด ์ญ์ , ๋ฐ์ดํฐ ์ ์ฒด ๋ถ๋ฌ์ค๊ธฐ ๋ฑ์ ์์ ๋ก ๋ง๋ค์ด๋ณด์๋ค.
MySQL ๋ฌธ๋ฒ๊ณผ ๋์ผํ๋ค.
SQLiteHelperSample.kt
import android.content.ContentValues
import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
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"
}
// ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ
override fun onCreate(db: SQLiteDatabase?) {
val SQL_CREATE_ENTERIES =
"CREATE TABLE $TBL_NAME (" +
"$ID INTEGER PRIMARY KEY," +
"$TITLE TEXT)"
db?.execSQL(SQL_CREATE_ENTERIES)
}
// ๋ฐ์ดํฐ ์ฝ์
fun insert(str: String) {
val db = this.writableDatabase
val values = ContentValues().apply {
put(TITLE, str)
}
db.insert(TBL_NAME, null, values)
}
// ๋ชจ๋ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
fun getAllData(): ArrayList<String> {
val db = this.readableDatabase
val query = "SELECT * FROM $TBL_NAME"
val arr = ArrayList<String>()
val cursor = db.rawQuery(query, null)
with(cursor) {
while (moveToNext()) {
arr.add(getString(1))
}
}
return arr
}
// ๋ชจ๋ ๋ฐ์ดํฐ ์ง์ฐ๊ธฐ
fun deleteAll() {
val db = this.writableDatabase
db?.execSQL("DROP TABLE IF EXISTS $TBL_NAME")
}
// DATABASE VERSION
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
db?.execSQL("DROP TABLE IF EXISTS $TBL_NAME")
onCreate(db)
}
}
MainActivity.kt
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
class MainActivity : AppCompatActivity() {
lateinit var db : SQLiteHelperSample
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
db = SQLiteHelperSample(this)
val inputArea = findViewById<EditText>(R.id.inputArea)
val insertBtn = findViewById<Button>(R.id.insert)
val getAllBtn = findViewById<Button>(R.id.getAll)
val deleteBtn = findViewById<Button>(R.id.deleteAll)
val resultBtn = findViewById<TextView>(R.id.resultArea)
// ๋ฐ์ดํฐ ์ฝ์
insertBtn.setOnClickListener {
val inputText = inputArea.text.toString()
db.insert(inputText)
inputArea.setText("")
}
// ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
getAllBtn.setOnClickListener {
val arr = db.getAllData()
resultBtn.text = arr.toString()
}
// ๋ฐ์ดํฐ ์ญ์
deleteBtn.setOnClickListener {
db.deleteAll()
}
}
override fun onDestroy() {
super.onDestroy()
db.close()
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<EditText
android:id="@+id/inputArea"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/insert"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="insert" />
<Button
android:id="@+id/getAll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="getAll" />
<Button
android:id="@+id/deleteAll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="deleteAll" />
<TextView
android:id="@+id/resultArea"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="resultArea"
android:textSize="30sp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
์คํํ๋ฉด
EditText๋ฅผ ํตํด 123, 423, 1, 2 ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๊ณ ์ ์ฒด ๋ถ๋ฌ์ค๊ธฐ
๊ฒฐ๋ก
์๋๋ก์ด๋ ์ฑ ๊ฐ๋ฐ์์ SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋,
๋ด์ฅ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ง์๋๋๊ฒฝ๋ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ด๋ฉฐ, ๊ตฌํ๊ณผ ๊ด๋ฆฌ๊ฐ ์ฝ๊ธฐ ๋๋ฌธ์ด๋ค.
SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์ ๋น ๋ฅด๊ฒ ๋์ํ๋ฉฐ, ์์ ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฅ์ ์ ์ ๊ณตํ ์ ์๋ค.
๋จ์ ์ผ๋ก๋ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์๋ ์ ํฉํ์ง ์๊ณ , ๋์์ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ๊ทผํ๋ ํ๊ฒฝ์์๋ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค.
SQLite๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ฟผ๋ฆฌ๋ฌธ์ ์ ๋ถ ์๊ณ ์์ด์ผ ํ๋ค.
๊ตฌ๊ธ์ ๋ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์์๋ ROOM ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐํํ์๋ค.
์ฐธ๊ณ
'๐ Development > Android' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java ์๋ฐ, Android ์๋๋ก์ด๋] ์ฑํ ๋ฐฉ ๋ง๋ค๊ธฐ (0) | 2023.07.17 |
---|---|
[์๋๋ก์ด๋] Jetpack์ ViewModel์ด๋? (์ฌ์ฉ๋ฒ ์์ ) (0) | 2023.05.22 |
[์๋๋ก์ด๋] JetPack์ LiveData๋? (0) | 2023.05.22 |
[์๋๋ก์ด๋] Jetpack์ Room DB์ด๋? (์ฌ์ฉ๋ฒ ์์ ) (0) | 2023.05.17 |
[์๋๋ก์ด๋] Retrofit2 ๋? (์ฌ์ฉ๋ฒ ์์ ) (1) | 2023.05.16 |