Можно ли использовать StringFormat или постоянную переменную в Android Room Query - PullRequest
0 голосов
/ 20 ноября 2018

Я хочу запросить список ассоциаций пользователей с помощью следующего запроса помещения, используя общедоступную постоянную переменную Association.MEMBER_STATUS_APPROVED .

@Query("SELECT * FROM Association WHERE memberStatus = " + Association.MEMBER_STATUS_APPROVED)
LiveData<List<Association>> loadUserAssociations();

Но место дает мне [SQLITE_ERROR] при сборке.Можно переписать этот запрос, заменив переменную константы параметром, подобным следующему.

@Query("SELECT * FROM Association WHERE memberStatus = :statusApproved")
LiveData<List<Association>> loadUserAssociations(String statusApproved);

Я хотел бы знать, поддерживает ли Room такой тип конкатенации строк или формат строки?(или) Может я что-то упустил?

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Для тех, у кого такая же проблема, в Котлине может быть следующее решение:

@Query("SELECT * FROM Association WHERE memberStatus = :statusApproved")
loadUserAssociations(statusApproved: String = Association.MEMBER_STATUS_APPROVED): LiveData<List<Association>>

И я думаю, что это более чистый способ, чем жесткое кодирование или передача очевидной константы в функцию.

0 голосов
/ 20 ноября 2018
  • проблема

если вы сделаете запрос, подобный этому,

"SELECT * FROM Association WHERE memberStatus =" + Association.MEMBER_STATUS_APPROVED

это просто

"SELECT * FROM Association WHERE memberStatus = somevalue"

sql не может знать, что "somvalue" является строкой.


  • попробуйте это (заключите в кавычки)

"ВЫБРАТЬ * ИЗ ОБЪЕДИНЕНИЯ ГДЕ memberStatus = '" + Ассоциация.MEMBER_STATUS_APPROVED + "'"

...