많은 양의 데이터를 관리하려면 데이터베이스는 필수라고 할 수 있다.
데이터베이스에도 종류는 여러가지지만,
이 글에선 안드로이드에서 기본적으로 사용가능한 SQLite를 사용해보자.
DB생성
가장 먼저 DBHelper.kt파일을 생성하여 아래와같이 작성해준다.
class DBHelper(
context: Context?,
name: String?,
factory: SQLiteDatabase.CursorFactory?,
version: Int
): SQLiteOpenHelper(context, name, factory, version){
override fun onCreate(db: SQLiteDatabase) {
var sql: String = "CREATE TABLE if not exists animals(" +
"id integer primary key autoincrement," +
"animal text);"
db.execSQL(sql)
}
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
val sql: String = "DROP TABLE if exists animals"
db.execSQL(sql)
onCreate(db)
}
}
DB에 animals라는 테이블을 생성하고, id와 animal이라는 열을 추가하는 코드이다.
코드를 작성했다면 다음으로 DB를 사용할 액티비티로 넘어가주도록 하자.
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
lateinit var dbHelper: DBHelper
lateinit var database: SQLiteDatabase
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
dbHelper = DBHelper(this, "mydb.db", null, 1)
database = dbHelper.writableDatabase
}
}
}
메인액티비티에 위와 같이 코드를 작성해주면,
mydb라는 db에 위에서 작성한 animals테이블을 생성하여 db를 사용할 준비를 끝마치게된다.
CRUD(Create, Read, Update, Delete)
db를 가지고 할 수 있는 작업은 기본적으로 CRUD작업이 있다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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">
<EditText
android:id="@+id/edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:textSize="20sp"
android:gravity="center"
android:inputType="textPersonName"
android:text="Animal" />
<Button
android:id="@+id/insert"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="INSERT" />
<Button
android:id="@+id/select"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="SELECT" />
<Button
android:id="@+id/update"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="UPDATE" />
<Button
android:id="@+id/delete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="DELETE" />
</LinearLayout>
위와 같이 레이아웃을 작성하여 버튼을 누를 때 마다 각 작업들을 수행하는 방법에 대해서 알아보자.
INSERT
데이터를 db에 삽입(추가, 생성)하는 작업이다.
INSERT INTO라는 명령어와 함께 테이블명, Column명, 삽입할 값등을 사용할 수 있다.
위에서 만든 db에 몇 가지 데이터들을 삽입해보도록 하자.
CRUD작업들은 기본적으로 SQL query를 통해 안드로이드에서 수행할 수 있다.
var query = "INSERT INTO animals('animal') values('${binding.edit.text}');"
database.execSQL(query)
Toast.makeText(this, "추가되었습니다.${binding.edit.text}", Toast.LENGTH_SHORT).show()
위 코드로 editText에 있는 텍스트를 animals테이블에 추가시켜보도록 하자.
SELECT
데이터를 db로부터 읽는 작업이다.
위에서 INSERT로 db에 추가한 값들을 SELECT로 확인해보도록 하자.
var animals = mutableListOf<String>()
var query = "SELECT * FROM animals;"
var cursor = database.rawQuery(query, null)
while(cursor.moveToNext()){
var id = cursor.getString(cursor.getColumnIndex("id"))
var animal = cursor.getString(cursor.getColumnIndex("animal"))
animals.add("${id}/${animal}")
}
Toast.makeText(this, animals.toString(), Toast.LENGTH_SHORT).show()
UDATE
db에 있는 데이터를 수정하는 작업이다.
맨 처음 넣었던 Rabbit이라는 값을 Cat으로 바꿔보도록 하자.
var query = "UPDATE animals SET animal = 'Cat' WHERE id = 1;"
database.execSQL(query)
WHERE을 사용해 id가 1인 행의 animal 열의 값을 Cat으로 변경했다.
DELETE
마지막으로 db에 있는 데이터를 삭제하는 작업이다.
2번째로 추가했던 Tiger가 있는 행을 삭제해보도록 하자.
var query = "DELETE FROM animals WHERE id = 2;"
database.execSQL(query)
이 네 가지 작업을 각 버튼에 추가하는 전체 코드이다.
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
lateinit var dbHelper: DBHelper
lateinit var database: SQLiteDatabase
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
dbHelper = DBHelper(this, "mydb.db", null, 1)
database = dbHelper.writableDatabase
binding.insert.setOnClickListener {
var query = "INSERT INTO animals('animal') values('${binding.edit.text}');"
database.execSQL(query)
Toast.makeText(this, "추가되었습니다.${binding.edit.text}", Toast.LENGTH_SHORT).show()
}
binding.select.setOnClickListener {
var animals = mutableListOf<String>()
var query = "SELECT * FROM animals;"
var cursor = database.rawQuery(query, null)
while(cursor.moveToNext()){
var id = cursor.getString(cursor.getColumnIndex("id"))
var animal = cursor.getString(cursor.getColumnIndex("animal"))
animals.add("${id}/${animal}")
}
Toast.makeText(this, animals.toString(), Toast.LENGTH_SHORT).show()
}
binding.update.setOnClickListener {
var query = "UPDATE animals SET animal = 'Cat' WHERE id = 1;"
database.execSQL(query)
}
binding.delete.setOnClickListener {
var query = "DELETE FROM animals WHERE id = 2;"
database.execSQL(query)
}
}
}
이상으로 안드로이드에서 SQLite를 사용하는 기본적인 방법에 대해서 알아보았다.
'안드로이드 > 개발관련(Kotlin)' 카테고리의 다른 글
안드로이드 AudioManager로 볼륨 조절(Kotlin) (0) | 2022.01.03 |
---|---|
안드로이드 Geofence(지오펜스) (0) | 2021.12.30 |
안드로이드 스피너(Spinner, Kotlin) (0) | 2021.12.26 |
안드로이드 커스텀 다이얼로그(CustomDialog, Kotlin) (1) | 2021.12.24 |
안드로이드 AlertDialog(Kotlin) (0) | 2021.12.23 |