개발 창고/Android

[Kotlin] How to Use "IN" Clause in SQLite

로이제로 2023. 12. 10. 22:00
반응형

 

 

1. 기본 방법

 SQLite에서는 이를 활용해서 IN절의 조건을 넣을 수 있습니다.

 만약 아래와 같은 상품 코드 기준의 상품을 삭제하는 Query를 실행해야 한다면

DELETE
  FROM PRODUCT
 WHERE PRDT_CODE IN (1, 2, 3, 4, 5)
// 삭제할 상품 코드 목록
val params = arrayListOf(1, 2, 3, 4, 5)

// SQLite Helper
val dbHelper:DBHelper = DBHelper(context, "데이터베이스명", null, 1)

// 쓰기 데이터베이스
val database = dbHelper.writableDatabase

// 삭제 실행
val tableName = "PRODUCT"
database.delete(PRODUCT, "PRDT_CODE in (?)", arrayOf(params.joinToString()))

 위와 같이 실행하면 1~5번 코드의 상품이 "데이터베이스명" 데이터베이스의 "PRODUCT" 테이블에서 삭제 되게 됩니다.

 

2. 문자열 기준 방법

 위의 경우에는 상품 코드가 INTEGER형인 경우이고, 만약 TEXT형인 경우 ('P001', 'P002', 등)인 경우에는 joinToString의 prefix와 postfix로 조정 가능합니다.

val params = arrayListOf("P001", "P002", "P003", "P004", "P005")
val code = params.joinToString("', '", "'", "'")
println(code)

문자열 배열을 파라미터로 만드는 방법

 

 위에 소스를 수정하면 아래와 같이 params와 joinToString이 변경되게 되고,

// 삭제할 상품 코드 목록
val params = arrayListOf("P001", "P002", "P003", "P004", "P005")

// SQLite Helper
val dbHelper:DBHelper = DBHelper(context, "데이터베이스명", null, 1)

// 쓰기 데이터베이스
val database = dbHelper.writableDatabase

// 삭제 실행
val tableName = "PRODUCT"
database.delete(PRODUCT, "PRDT_CODE in (?)", arrayOf(params.joinToString("', '", "'", "'")))

 결과 Query는 아래와 같습니다.

DELETE
  FROM PRODUCT
 WHERE PRDT_CODE IN ('P001', 'P002', 'P003', 'P004', 'P005')

 

반응형