2012-06-18 7 views
1

Я работаю над приложением iOS, которое использует базу данных SQLite.check sqlite column type

В следующем выпуске моего продукта я хотел бы перенести столбец таблицы с TEXT на BLOB. я планирую сделать DROP TABLE заканчивающиеся на CREATE TABLE (мы можем позволить себе потерять данные, это не проблема здесь)

Моей проблема: как я могу проверить, просто из Objective-C, если тип добавлен столбец таблицы является TEXT или BLOB?

ответ

2

SQLite является «Бестиповым». Это означает, что вы можете хранить любые данные, которые вы хотите, в любом столбце любой таблицы, независимо от объявленного типа данных этого столбца. Вы можете найти дополнительную информацию here.

Но если вы хотите получить информацию о объявленном типе данных столбца, вы можете сделать это, используя pragma table_info (table_name).

например.

pragma table_info(Setting); 

Затем вы можете перебирать возвращаемый набор результатов и проверять тип данных, который вы хотите проверить.

+0

, вы можете фактически опускать типы данных при создании таблицы в sqlite3 – zahreelay

+0

Спасибо за подробный ответ! Я действительно могу вставить двоичные данные в свой столбец, объявленный как 'TEXT'. Нет необходимости обновлять таблицу. –

1

Зачем вам нужна эта проверка? Вы можете поймать первый запуск после освобождения (использовать настройки для этого) и обновить таблицу, будет легче

проверки первого старта после выпуска:

NSUserDefaults *prefs=[NSUserDefaults standardUserDefaults];   
BOOL flag=[prefs boolForKey:SETTINGS_ALREDY_RAN];//will be NO if settings hasn't those parameters, you can change it to version number 
+0

Спасибо за ответ, но как я могу поймать первый запуск после выпуска? Это тоже сложно проверить на моей среде разработки. –

+0

append check to my answer – aknew

+0

Это скорее подвержено ошибкам - я предпочитаю проверять характер _real_ в столбце таблицы, а не проверять логические предпочтения, которые по той или иной причине могут не совпадать с табличной структурой? –