Вам нужно изменить схему базы данных в методе onUpgrade SQLiteOpenHelper?

Я пытаюсь написать приложение для Android, содержащее базу данных, которая динамически меняет свою схему на основе пользовательского ввода.

Например, предположим, что у вас изначально есть таблица, в которой единственным столбцом является столбец для разных пород щенков. Это будет первичный ключ. Затем пользователь может динамически добавлять новые атрибуты, которые будут соответствовать новым столбцам в этой таблице (например, цвет, наличие пятен, размер и т. д.).

Мне было интересно, должен ли запрос ALTER TABLE выполняться в onUpgrade или я могу сделать это другим методом в подклассе SQLiteOpenHelper. Я действительно не знаю, действительно ли необходимо увеличивать версию базы данных каждый раз, когда пользователь хочет добавить новый атрибут. Спасибо!


person Nick    schedule 20.04.2015    source источник


Ответы (2)


Мне было интересно, должен ли запрос ALTER TABLE выполняться в onUpgrade или я могу сделать это другим методом в подклассе SQLiteOpenHelper.

Вы можете выполнять операторы ALTER TABLE в любое время (как и при любом вводе-выводе базы данных) в фоновом потоке, пожалуйста.

В вашем случае я не знаю, почему вы используете SQLiteOpenHelper. Смысл SQLiteOpenHelper заключается в том, чтобы помочь разработчикам создавать приложения с фиксированными (для каждой версии) схемами. Это не тот путь, по которому вы идете, и в этом случае SQLiteOpenHelper может не сильно помочь.

person CommonsWare    schedule 20.04.2015

onUpgrade будет вызываться только тогда, когда файл базы данных уже существует, но сохраненная пользовательская версия ниже, чем запрошено в конструкторе. Я использовал эту функцию для внесения изменений в схему базы данных при выпуске новой версии приложения. Но если вы хотите динамически добавлять столбцы, да, вы можете использовать команду ALTER TABLE.

person Christian Abella    schedule 20.04.2015