Reputation: 5672
I am trying to convert this raw query to Query.
Raw Query:
SELECT * from numbers WHERE number=$numberToSearch OR number LIKE '%$numberToSearch%' OR number LIKE '%$numberToSearch' OR number LIKE '$numberToSearch%'
I started with simple one and created this Query
@Query("SELECT * from numbers WHERE number=:numberToSearch OR number LIKE :numberToSearch")
However, room things that my query needs to variables and creates exception. I can of course provide :numberToSearch few times as variable but that doe not sound right.
Is there any way writing a Query that works?
Upvotes: 1
Views: 63
Reputation: 6882
You should enclose your like query with %
before passing as a parameter.
So correct representation of what you original query is goes as follows
val numberToSearch = 123
val numberToSearchLike = `%$numberToSearch%`
// You have to call with two parameters as parameters are not same
searchNumber(numberToSearch, numberToSearchLike)
And your DAO should look like this
@Query("SELECT * from numbers WHERE number=:numberToSearch OR number LIKE :numberToSearchLike")
fun searchNumber(numberToSearch:Int, numberToSearchLike: String)
Thats actually the way your do LIKE
operations in Room
In fact you don't have to have WHERE number=:numberToSearch
as your LIKE
operator will return the same thing.
So your query is same as saying
@Query("SELECT * from numbers WHERE number LIKE :numberToSearchLike")
Upvotes: 1