Обнаружение Если таблица содержит столбец в Android / SQLite

StackOverflow https://stackoverflow.com/questions/2675388

  •  28-09-2019
  •  | 
  •  

Вопрос

Поэтому у меня есть приложение на рынке, и с обновлением я хочу добавить несколько столбцов в базу данных. Нет проблем до сих пор. Но я хочу обнаружить, если в использовании база данных отсутствует эти столбцы, и добавьте их, если это так. Мне нужно это сделать динамически, а не только после обновления до новой версии, потому что приложение должно быть возможность импортировать старые базы данных. Обычно я смогу использовать Прагма Запрос, но я не уверен, как сделать это с Android. Я не могу использовать execsql, поскольку это запрос, и я не могу выяснить, как использовать Pragma с помощью Query () - функция.

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

Ваше здоровье,

Это было полезно?

Решение

Прагма работает. В качестве примера я просто попробовал это на одном из моих Android приложений DBS.

sqlite> pragma table_info (userCommand);

cid name        type    notnull     dflt_value  pk
0   id      INTEGER     0       1
1   description TEXT    0       0
2   message     TEXT    0       0

Как мы видим, есть три поля в указанной таблице. Идентификатор, описание и сообщение.

Так что в вашем приложении используйте что-то вроде:

Cursor c = null;
c = RawQuery ("pragma table_info (userCommand)",null); 
// if c has records and is not null then iterate through the records in search of your table name. 

Пожалуйста, возьми плохое форматирование.

Другие советы

Это может быть излишним, но вы можете выбрать одну строку из таблицы в курсор и использовать Cursor.GetColumnindex ([имя столбца как строка]). Это вернет -1, если оно не существует.

Попробуйте использовать PRAGMA с участием rawQuery() вместо query().

Вы можете выдать следующую команду и пройти результаты и посмотреть, указан ли ваш столбец.

pragma table_info(table_name);

Редактировать: Я никогда не делал этого на Android, но я думаю, что он должен работать

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top