Ошибка при передаче 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
Надеюсь, вы понимаете поведение комнаты ^^