| 구분 | 1열 | 2열 | 3열 |
|---|---|---|---|
| 1행 | 1행 1열 | 1행 2열 | 1행 3열 |
| 2행 | |||
| 3행 |

(1) SQLite를 상속받는 클래스를 만들어준다. (DBHelper.kt)
package kr.co.lion.test3
import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
class DBHelper(context:Context, dbName:String, version:Int) : SQLiteOpenHelper(context, dbName, null, version){
companion object{
val databaseVersion = 1
}
override fun onCreate(db: SQLiteDatabase?) {
val sql = """create table ToDoList
| (idx integer primary key autoincrement,
| data1 String not null,
| data2 String not null,
| data3 integer not null)
""".trimMargin()
// 쿼리문 실행
db?.execSQL(sql)
}
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
}
}
(2) SQLiteOpenHelper 의 객체를 생성하고 읽어준다. (MainActivity.kt)
// DBHelper 객체 생성
val dbHelper = DBHelper(mainActivity, "test.db", DBHelper.databaseVersion)
// SQLite 읽어오기
val sqLiteDatabase = dbHelper.writableDatabase
// 데이터 베이스를 닫아준다.
sqLiteDatabase.close()
(3) 생성된 DB의 모습 캡처 (sqliteviewer 사이트)

(4) 여기까지가 SQL table만 만든 상태. 이 DB에 data를 추가하려면?
fun setEvent(){
fragmentInputBinding.apply {
// 버튼을 누르면 입력한 내용을 DB에 저장
buttonInput.setOnClickListener {
// 사용자가 입력한 내용을 가져온다.
val title = textFieldToDoListTittle.text.toString()
val content = textFieldToDoListContent.text.toString()
// 할일 완료 여부
val isDone = false
// 입력 검사
if (title.isEmpty()) {
Snackbar.make(fragmentInputBinding.root, "제목을 입력해주세요", Snackbar.LENGTH_SHORT).show()
}
if (content.isEmpty()) {
Snackbar.make(fragmentInputBinding.root, "내용을 입력해주세요", Snackbar.LENGTH_SHORT).show()
}
// DB에 넣어준다
val sqLiteInsert = """insert into ToDoList
| (data1, data2, data3)
| values (?, ?, ?)
""".trimMargin()
// ?에 맵핑될 값
// 순서대로 작성해줘야 한다.
val arg1 = arrayOf(title, content, isDone)
// DBHelper 객체 생성
val dbHelper = DBHelper(mainActivity, "test.db", DBHelper.databaseVersion)
// 쿼리문을 실행한다.
// 첫 번째 - 쿼리문, 두 번째 - ? 에 바인딩될 값이 담긴 배열
dbHelper.writableDatabase.execSQL(sqLiteInsert, arg1)
// SQLite 읽어오기
val sqLiteDatabase = dbHelper.writableDatabase
// 데이터 베이스를 닫아준다.
sqLiteDatabase.close()
Toast.makeText(mainActivity, "저장완료", Toast.LENGTH_SHORT).show()
}
}
}
그리고 돌려보면


데이터가 추가되어있다.
인덱스 1,2번은 걍 암거나 입력한건데 저장눌러버림 ㅎㅎ
인덱스는 입력하지 않았는데 추가되어있다. autoincrement로 선언해서 자동생성 된 것이다! 아무튼 잘 저장되는 것을 보니 별 거 아닌데 기뻤음
(5) 이제 DB 저장한 항목을 리사이클러뷰에 띄워야 한다.
리사이클러뷰를 갱신하려면?
Adatper 클래스의 notifyDataSetChanged() 메서드를 호출하면 된다.
저장된 목록을 불러와 리스트에 저장하고 화면에 띄워주면 끝!!!!