2009-12-15 3 views
4

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

Я в основном хочу сделать что-то вроде «CREATE TABLE if NOT EXISTS table .... else ... DELETE FROM table». Должен быть способ сделать это, я подозреваю, что есть некоторые способы, которые более эффективны, чем другие. Например, вы бы подумали, что было бы лучше использовать существующую таблицу, а не удалять и воссоздавать, но это зависит от того, что связано с проверкой наличия и удаления ее содержимого.

В качестве альтернативы, существует ли способ записи базы данных в память (sqlite3_open (": memory:", db)), но затем получить ее содержимое - как массив байтов или что-то - для записи в файл?

ответ

7

Для всех систем баз данных почти всегда будет более эффективно ОБРАТИТЬ таблицу, а затем повторно СОЗДАЙТЕ ее. Использование DELETE потребует обновления индексов и т. Д., В то время как простой DROP также удаляет индексы и не будет включать в себя записи журнала транзакций. Для SQLite вы можете сделать DROP IF EXISTS, чтобы отказаться от условности таблицы.

1

Как насчет того, чтобы где-то был готов пустой, полностью разработанный файл базы данных. Затем, если база данных предполагаемых приложений не существует, создайте ее, скопировав пустой файл db?

1

Если вы собираетесь прочитать данные приложения в какой-то момент, прежде чем записывать его обратно - пользовательские настройки, например, вы узнаете, существуют ли данные или нет. Попробуйте вызовы к таблицам, завернутые в обработке исключений, и вы будете знать, если они существуют - в качестве альтернативы использовать таблицы базы данных, чтобы сказать вам, что существует:

SELECT name FROM sqlite_master 
WHERE type='table' 
ORDER BY name; 

Если только каждый хочет, чтобы перезаписать существующий файл базы данных вы можете легко просто удалите db-файл с диска, а затем запустите свой код создания - просто - не возитесь с кавычками в любом месте. Не беспокойтесь о том, что изменения в db между версиями.