Ошибка при передаче TableName с параметрами с помощью -Android Sqlite Room ORM

1.При попытке получить доступ к данным с именем таблицы в качестве параметра, используя метод, вы получите ошибку, указанную ниже, используя Room Library в Android.

-> Проблема с запросом: ОШИБКА] Ошибка SQL или отсутствует база данных (такой таблицы нет: Имя таблицы)

MainActivity.class

userData1= userSampleDatabase.daoAccessForUser().getItembyIdvalue("UserData","1");

DaoAccessForUser.class

 @Query("select * from 'tableName' where id = :id")
 List<UserData> getItembyIdvalue(String tableName,String id);

Заранее спасибо.

3 ответа

Решение

Комната не поддерживает динамическую замену имени таблицы.

В вашем DAO замените 'tableName' с фактическим именем таблицы, как определено в связанном @Entity, Или используйте@RawQuery вместо @Query и предоставить весь SQL SELECT заявление во время выполнения.

Как предложил CommonsWare, вы можете использовать @RawQuery. В вас DaoAccessForUser.class

@RawQuery
 List<UserData> getUserDataList(String query);

и вы можете назвать это так

String tablename="UserData";
String id="1";
    userData1= userSampleDatabase.daoAccessForUser().getUserDataList("select * from "+tablename+" where id = " + id);

Есть причина, по которой вы получаете эту ошибку во время компиляции; Проверка номеров во время компиляции, чтобы убедиться, что ваше приложение не столкнется с проблемой во время выполнения.

Так что, насколько знает Комната, там может не быть id в вашем table совсем! Чтобы ваше приложение не сталкивалось с такой проблемной комнатой, необходимо предоставить table имя заранее. Если эта функция необходима для вашего проекта, попробуйте использовать ORM с Query Builder как greenDAO или dbflow

Надеюсь, вы понимаете поведение комнаты ^^

Другие вопросы по тегам