안드로이드/개발관련(Kotlin)

안드로이드 데이터베이스 SQLite(Koltin)

닉네임못짓는사람 2021. 12. 27. 14:34
반응형

많은 양의 데이터를 관리하려면 데이터베이스는 필수라고 할 수 있다.

데이터베이스에도 종류는 여러가지지만,

이 글에선 안드로이드에서 기본적으로 사용가능한 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를 사용하는 기본적인 방법에 대해서 알아보았다.

 

반응형