SQLiteOpenHelper 클래스 생성
SQLiteOpenHelper는 SQLite에 접근하는 클래스로, SQL 명령어를 실행하고 DB를 관리하는 메소드를 가지고 있습니다. SQLiteOpenHelper를 상속받게 되면 다음의 3가지를 구현해 주어야 합니다.
- constructor : DB name과 DB version 명시
- onCreate : DB 생성
- onUpgrade : 생성한 DB의 version이 올라 수정이 필요한 경우
class SQLiteHelper(context: Context, name: String, version: Int) :
SQLiteOpenHelper(context, name, null, version) {
public static final String TABLE_NAME = "Students";
override fun onCreate(db: SQLiteDatabase?) {
val create = "CREATE TABLE " + TABLE_NAME + " (" +
"ID INTEGER PRIMARY KEY, " +
"NAME TEXT, " +
"NUMBER INTEGER, " +
"GRADE INTEGER" +
")"
db?.execSQL(create)
}
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
val upgrade = "DROP TABLE IF EXISTS " + TABLE_NAME;
db.execSQL(upgrade)
onCreate(db);
}
}
데이터 클래스 생성
data class Student(
var id: Long?,
var name: String,
var number: Long,
var grade: Long
)
- 데이터베이스를 생성할 때는 Integer로 설정했으나, 숫자의 범위가 서로 다르기 때문에 데이터 클래스 생성 시에는 Long으로 설정합니다.
- id만 null을 허용한 이유는 id는 Primary key로 지정되어 값이 자동으로 증가하기 때문에 데이터 삽입 시에 필요하지 않기 때문입니다.
CRUD 메서드 생성
- CREATE (INSERT)
fun insertStudent(student: Student) {
// SQLiteOpenHelper를 이용한 값 입력 시, Map 클래스와 비슷한 ContentValues 클래스를 이용
val values = ContentValues()
values.put("NAME", student.name)
values.put("NUMBER", student.number)
values.put("GRADE", student.grade)
// 데이터베이스 불러와 데이터 입력
val wd = writableDatabase
wd.insert("Students", null, values)
wd.close()
}
- READ (SELECT)
fun selectStudent(): MutableList<Student> {
val list = mutableListOf<Student>()
val select = "SELECT * FROM Students"
val rd = readableDatabase
// 작성해둔 쿼리를 담아서 커서를 불러온다
val cursor = rd.rawQuery(select, null)
// 모든 레코드를 읽을 때까지 반복하고, 레코드가 없으면 반복문을 빠져나간다
while (cursor.moveToNext()) {
val id = cursor.getLong(cursor.getColumnIndex("ID"))
val name = cursor.getString(cursor.getColumnIndex("NAME"))
val number = cursor.getLong(cursor.getColumnIndex("NUMBER"))
val grade = cursor.getLong(cursor.getColumnIndex("GRADE"))
list.add(Student(id, name, number, grade))
}
cursor.close()
rd.close()
return list
}
- UPDATE
fun updateStudent(student: Student) {
val values = ContentValues()
values.put("NAME", student.name)
values.put("NUMBER", student.number)
values.put("GRADE", student.grade)
val wd = writableDatabase
// update(테이블 이름, update할 데이터, 수정할 조건)
// 수정할 조건 : 몇 번째 커서에 있는 값을 수정할 것인지 Primary Key로 지정한 속성 사용
wd.update("Students", values, "id = ${student.id}", null)
wd.close()
}
- DELETE
fun deleteStudent(student: Student) {
val delete = "DELETE FROM Students WHERE id = ${student.id}"
val db = writableDatabase
db.execSQL(delete)
db.close()
}
728x90
반응형
'안드로이드 > 활용' 카테고리의 다른 글
[Android] ListAdapter로 RecyclerView 효율적으로 사용하기 (0) | 2023.07.27 |
---|---|
[Android] RecyclerView (0) | 2023.07.26 |
[Android] addView와 ListView (0) | 2023.07.25 |
[Android] Room 사용하기 (0) | 2023.07.24 |
[Android] 로컬 데이터베이스에 데이터 저장 (0) | 2023.07.22 |