Android ROOM in 조건 변수 사용

개요

Android ROOM 사용 시 변수를 넘겨서 조건으로 사용하는 경우가 많습니다. 단순한 조건이나 개수가 많지 않은 경우 and 나 or 연산자로 충분합니다. 그러나 비교해야 하는 대상이 많아지게 되면 or 조건으로 나열하는 것이 쉽지 않습니다. 그래서 in 연산자로 대상을 나열해서 조건식으로 적용하게 됩니다. 이번글에서는 Andorid ROOM in 조건 변수 사용 방법을 알아보도록 하겠습니다.

전달변수

다음 코드와 같이 변수를 넘겨서 조건식에 들어가도록 합니다.

@Query("SELECT * FROM your_table where data_type = :dataType")
fun getYourData(dataType:String): YourClass

그러면 변수를 문자열 형태로 ‘A’, ‘B’, ‘C’ 이렇게 조합해서 전달하면 되지 않을까 생각할 수 있습니다.

@Query("SELECT * FROM your_table where data_type in (:dataTypeCondition)")
fun getYourData(dataTypeCondition:String): YourClass

그러면 최종적으로 다음과 같은 명령어로 해석된다고 예상할 수 있습니다.

SELECT * FROM your_table where data_seq in ('A', 'B', 'C')

그러나 이렇게 하면 원하는 결과가 나타나지 않습니다.

올바른 방법

변수를 하나의 문자열로 생각하지 않고 문자열 배열이나 ArrayList 형태로 전달해야 합니다. 아래코드에서는 ArrayList 형태로 전달했습니다. dataTypeCondition 변수에 원하는 조건을 다음과 같이 add 로 추가한 후 전달하면 됩니다.

dataTypeCondition.add("A")
dataTypeCondition.add("B")
dataTypeCondition.add("C")
@Query("SELECT * FROM your_table where data_type in (:dataTypeCondition)")
fun getYourData(dataTypeCondition:ArrayList<String>): YourClass

위와 같이 변수를 적용하면 in 조건이 적용된 결과가 반환됩니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Time limit is exhausted. Please reload the CAPTCHA.