Android SQLite column int можно использовать с плавающей точкой?

#android #sqlite

#Android #sqlite

Вопрос:

У меня есть приложение на Android Market, в котором пользовательские данные хранятся в SQLite. Я создал таблицу базы данных со столбцом целых чисел. Я хотел бы сохранить там значения с плавающей запятой сейчас. Как я могу это сделать? Когда я пытаюсь вставить значение с плавающей точкой, мое приложение, похоже, выдает исключение.

Ответ №1:

Поскольку SQLite не реализует полную поддержку ALTER TABLE (только переименование таблицы и добавление столбца), вам придется:

  • создайте временную таблицу с новым форматом столбца, то есть с плавающей точкой
  • скопируйте данные из исходной таблицы во временную таблицу (целые числа будут «расширены» до значений с плавающей точкой, потери данных здесь нет), например INSERT INTO tmp SELECT * FROM orig
  • удалите исходную таблицу
  • переименовать временную таблицу в исходную таблицу

Комментарии:

1. Спасибо! Я немного новичок в SQLite, если я создам новую таблицу, скажем, с первыми 5 столбцами с теми же именами, что и у моего оригинала, могу ли я создать эту новую таблицу с неопределенными типами данных? Какой пример можно создать без указания типа данных? Сможете INSERT ли скопировать значения в новую таблицу с другим типом данных?

2. Новая таблица не представляет собой ничего особенного и должна быть создана как любая другая таблица, т.Е. Полные определения столбцов, включая тип данных. Если вы сохраняете все имена столбцов одинаковыми и используете только «расширяющие» преобразования (например, int -> float), вы должны иметь возможность использовать INSERT INTO .. SELECT синтаксис, приведенный в моем ответе, чтобы легко копировать все данные.

Ответ №2:

К сожалению, SQLite не поддерживает использование alter table для изменения типа данных столбца. Итак, единственное известное мне решение — создать новую таблицу (с конкретным столбцом, не указанным в качестве int типа данных), заполнить новую таблицу, удалить старую таблицу, а затем переименовать новую таблицу (с помощью alter table команды) с тем же именем, что и у старой таблицы.