База данных Android комнат.Создание и удаление таблиц с именем таблицы в качестве параметра - PullRequest
0 голосов
/ 27 сентября 2018

Можно ли как-нибудь создавать и удалять таблицы, похожие на «RawQuery»?

Я пытался с @RawQuery аннотацией (что это было бы идеальным решением для меня) , но когда я компилирую, я получаю сообщение об ошибке, сообщающее, что методы, помеченные RawQuery, не могут вернуть void .

Я только для чтения SELECT, UPDATE и DELETE операторы разрешены при использовании @Query.

Я хотел бы добиться «создания или удаления таблиц»"передавая tablename в качестве параметра, что-то вроде следующего:

@Query("DROP TABLE :name")
void deleteTable (String name); 

Любые идеи о том, как этого добиться?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Официальный документ гласит, что

RawQuery служит в качестве аварийного люка, где вы можете создать свой собственный запрос SQL во время выполнения, но все еще использовать Комната , чтобы преобразовать ее в объекты.

RawQuery методы должны возвращать тип non-void . Если вы хотите выполнить необработанный запрос, который не возвращает никакого значения, используйте методы RoomDatabase # query .

или используйте его как

@RawQuery
int deleteTable (SupportSQLiteQuery query); //We can return int status like it used to return with database.delete()

//Usage

dao.deleteTable(
        new SimpleSQLiteQuery("DROP TABLE tablename")
)
0 голосов
/ 27 сентября 2018

Дело в том, что вам не нужно «отбрасывать» таблицы, таблицы создаются заново на основе классов вашей сущности (помеченных @Entity).

Насколько я знаю, вам обычно нужно отбрасывать таблицы в случае изменения столбцов или в случае каких-либо обновлений "структуры", в Room нет никакого смысла делать это, если вы не измените структуру вашей сущности.это не может быть автоматически обработано миграцией.В этом случае Room дает вам возможность выполнить миграцию самостоятельно.Проверьте документацию здесь: https://developer.android.com/training/data-storage/room/migrating-db-versions Но, как говорится в документации, будьте очень осторожны с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...