#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
команды) с тем же именем, что и у старой таблицы.