
클래스
메서드
moveToNext(), moveToFirst(), getColumnIndex(String heading)
SQListOpenHelper을 상속받아 테이블 생성하는 클래스
onCreate, onOpen, onUpgrade(DB가 구버전이라면 업그레이드 처리)
DB안에 table을 생성할때 일반적으로 _id라는 자동으로 ++되는 column도 추가함
private const val TAG = "DBHelper_싸피"
private const val TABLE = "mytable"
class DBHelper(
context: Context,
name: String,
factory: SQLiteDatabase.CursorFactory?,
version: Int
) : SQLiteOpenHelper(context, name, factory, version) {
private lateinit var db: SQLiteDatabase
override fun onCreate(db: SQLiteDatabase) {
// 테이블 생성 쿼리
val query: String =
"CREATE TABLE if not exists $TABLE ( _id integer primary key autoincrement, txt text);"
db.execSQL(query)
}
// upgrade 가 필요한 경우 기존 테이블 drop 후 onCreate로 새롭게 생성
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
val sql: String = "DROP TABLE if exists $TABLE"
db.execSQL(sql)
onCreate(db)
}
override fun onOpen(db: SQLiteDatabase) {
super.onOpen(db)
this.db = db
Log.d(TAG, "onOpen: database 준비 완료")
}
fun insert(content: String) {
// ContentValues를 이용한 저장
val contentValues = ContentValues()
contentValues.put("txt", content)
db.beginTransaction()
val result = db.insert(TABLE, null, contentValues)
// sql을 이용한 저장
// val query = "INSERT INTO mytable('txt') values('sql 문장 이용용');";
// db.execSQL(query)
if (result > 0) {
db.setTransactionSuccessful()
}
db.endTransaction()
}
fun list(): String {
var result = ""
// val columns = arrayOf("_id", "txt")
// db.query(TABLE, columns, null, null, null, null, null).use{
// while (it.moveToNext()) {
// result += "_id: ${it.getInt(0)}, txt: ${it.getString(1)}\n"
// }
// }
db.rawQuery("select * from $TABLE", null).use{
while (it.moveToNext()) {
result += "_id: ${it.getInt(0)}, txt: ${it.getString(1)}\n"
}
}
return result
}
fun update(id: String, content: String) {
// ContentValues를 이용한 수정
val contentValues = ContentValues()
contentValues.put("txt", content)
db.beginTransaction()
val result = db.update(TABLE, contentValues, "_id=?", arrayOf(id))
// sql을 이용한 수정
// val query = "update $TABLE set txt=$content where _id=$id";
// db.execSQL(query)
if (result > 0) {
db.setTransactionSuccessful()
}
db.endTransaction()
}
fun delete(id: String) {
db.beginTransaction()
val result = db.delete(TABLE, "_id=?", arrayOf(id))
// sql을 이용한 삭제
//val query = "delete from $TABLE where _id=$id";
// db.execSQL(query)
if (result > 0) {
db.setTransactionSuccessful()
}
db.endTransaction()
}
fun select(id: String): Map<String, Any> {
val columns = arrayOf("_id", "txt")
val cursor = db.query(TABLE, columns, "_id=?", arrayOf(id), null, null, null)
var result = mutableMapOf<String, Any>()
if (cursor.moveToNext()) {
result.put("_id", cursor.getInt(0))
result.put("txt", cursor.getString(1))
}
return result
}
}
insert문을 보면 직접 쿼리를 작성하여 db에 execute 하는 것은 주석처리 되어있고
contentValues를 사용하는 방법으로 되어있다.
contentValues에 내가 넣을 컬럼과 value를 넣어 db.insert문에 넣어서 쿼리를 실행할 수도 있다.
또한 list()문에서는 db.rawQuery문 안에 쿼리문을 넣어서 실행시켰다.
update()문도 contentValues를 활용하여 쿼리를 실행하였다.
val result = db.update(TABLE, contentValues, "_id=?", arrayOf(id))
?가 여러개 들어올 수 있기 때문에 arrayOf로 값을 전달하도록 함수가 구성되어 있다.
private const val TAG = "DBHelper_싸피"
private const val TABLE = "mytable"
class DBHelper(
context: Context,
name: String,
factory: SQLiteDatabase.CursorFactory?,
version: Int
) : SQLiteOpenHelper(context, name, factory, version) {
private lateinit var db: SQLiteDatabase
override fun onCreate(db: SQLiteDatabase) {
// 테이블 생성 쿼리
val query: String =
"CREATE TABLE if not exists $TABLE ( _id integer primary key autoincrement, txt text);"
db.execSQL(query)
}
// upgrade 가 필요한 경우 기존 테이블 drop 후 onCreate로 새롭게 생성
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
val sql: String = "DROP TABLE if exists $TABLE"
db.execSQL(sql)
onCreate(db)
}
override fun onOpen(db: SQLiteDatabase) {
super.onOpen(db)
this.db = db
Log.d(TAG, "onOpen: database 준비 완료")
}
fun insert(content: String) {
// ContentValues를 이용한 저장
val contentValues = ContentValues()
contentValues.put("txt", content)
db.beginTransaction()
val result = db.insert(TABLE, null, contentValues)
// sql을 이용한 저장
// val query = "INSERT INTO mytable('txt') values('sql 문장 이용용');";
// db.execSQL(query)
if (result > 0) {
db.setTransactionSuccessful()
}
db.endTransaction()
}
fun list(): String {
var result = ""
// val columns = arrayOf("_id", "txt")
// db.query(TABLE, columns, null, null, null, null, null).use{
// while (it.moveToNext()) {
// result += "_id: ${it.getInt(0)}, txt: ${it.getString(1)}\n"
// }
// }
db.rawQuery("select * from $TABLE", null).use{
while (it.moveToNext()) {
result += "_id: ${it.getInt(0)}, txt: ${it.getString(1)}\n"
}
}
return result
}
fun update(id: String, content: String) {
// ContentValues를 이용한 수정
val contentValues = ContentValues()
contentValues.put("txt", content)
db.beginTransaction()
val result = db.update(TABLE, contentValues, "_id=?", arrayOf(id))
// sql을 이용한 수정
// val query = "update $TABLE set txt=$content where _id=$id";
// db.execSQL(query)
if (result > 0) {
db.setTransactionSuccessful()
}
db.endTransaction()
}
fun delete(id: String) {
db.beginTransaction()
val result = db.delete(TABLE, "_id=?", arrayOf(id))
// sql을 이용한 삭제
//val query = "delete from $TABLE where _id=$id";
// db.execSQL(query)
if (result > 0) {
db.setTransactionSuccessful()
}
db.endTransaction()
}
fun select(id: String): Map<String, Any> {
val columns = arrayOf("_id", "txt")
val cursor = db.query(TABLE, columns, "_id=?", arrayOf(id), null, null, null)
var result = mutableMapOf<String, Any>()
if (cursor.moveToNext()) {
result.put("_id", cursor.getInt(0))
result.put("txt", cursor.getString(1))
}
return result
}
}