1. ホーム
  2. android

[解決済み] Android Room - LIKEでクエリを選択する

2022-05-12 17:25:27

質問

名前にテキストが含まれるすべてのオブジェクトを検索するクエリを作成しようとしています。

@Query("SELECT * FROM hamster WHERE name LIKE %:arg0%")
fun loadHamsters(search: String?): Flowable<List<Hamster>>

メッセージ

Error:no viable alternative at input 'SELECT * FROM hamster WHERE name LIKE %'
Error:There is a problem with the query: [SQLITE_ERROR] SQL error or missing database (near "%": syntax error)
Error:Unused parameter: arg0

また、私は試しています。

@Query("SELECT * FROM hamster WHERE name LIKE '%:arg0%'")
fun loadHamsters(search: String?): Flowable<List<Hamster>>

メッセージ

Error:Unused parameter: arg0

これを修正する方法は?

どのように解決するのですか?

を囲む必要があります。 % 文字を入力クエリで囲む必要があります - クエリ自体ではありません。

例:これを試してみてください。

@Query("SELECT * FROM hamster WHERE name LIKE :arg0")
fun loadHamsters(search: String?): Flowable<List<Hamster>>

次に、あなたの String search の値は次のようになるはずです。

search = "%fido%";
loadHamsters(search);

さらに、バインディング・パラメータ名は変数名と一致させる必要があります。 arg0 のように見えるはずです。

@Query("SELECT * FROM hamster WHERE name LIKE :search")
fun loadHamsters(search: String?): Flowable<List<Hamster>>