Как я могу перезаписать содержимое файла SQLite - PullRequest
4 голосов
/ 15 декабря 2009

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

Я в основном хочу сделать что-то вроде "CREATE TABLE ЕСЛИ НЕ СУЩЕСТВУЕТ таблица .... еще ... УДАЛИТЬ ИЗ таблицы". Должен быть способ сделать это, я подозреваю, что есть некоторые способы, которые более эффективны, чем другие. Например, вы можете подумать, что было бы лучше использовать существующую таблицу, а не удалять и воссоздавать ее, но это зависит от того, что связано с проверкой ее существования и удалением ее содержимого.

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

Ответы [ 3 ]

8 голосов
/ 15 декабря 2009

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

1 голос
/ 15 декабря 2009

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

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

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

1 голос
/ 15 декабря 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...