У меня есть приложение Ionic, использующее SQLite. У меня нет проблем с реализацией. Проблема в том, что мне нужно импортировать файл SQL с помощью SQLitePorter, чтобы заполнить базу данных информацией о конфигурации. Но также в той же базе данных у меня есть информация о пользователе, поэтому мой вопрос:
Каждый раз, когда я запускаю приложение, оно будет импортировать файл sql, заполнять базу данных и, возможно, также перезаписывать мои пользовательские данные? Так как это все на одной базе?
Я предполагаю, что вы всегда можете инициализировать свою таблицу, используя строковые запросы внутри своего кода. Проблема не в том, что вы импортируете файл .sql. Верно? Согласно https://www.sqlitetutorial.net/sqlite-create-table/ очевидно, что вы всегда создаете таблицу с переключателем [ЕСЛИ НЕ СУЩЕСТВУЕТ]. Написание запроса вида:
CREATE TABLE [IF NOT EXISTS] [schema_name].table_name (
column_1 data_type PRIMARY KEY);
вы позволяете sqlite решить, будет ли он создавать таблицу с риском перезаписать существующую таблицу. Предполагается, что вы можете доверять тому, что sqlite достаточно умен, чтобы не перезаписывать какую-либо информацию, особенно если вы используете процедуру «НАЧАТЬ ТРАНЗАКЦИЮ» - «КОММИТ».
Я даю свой ответ, предполагая, что вы импортировали данные и пользовательские данные в отдельные таблицы, поэтому вы можете манипулировать тем, что вы заполняете, а что нет. Это правильно?
Что я обычно делаю, так это иметь такой файл sql:
DROP TABLE configutation_a;
DROP TABLE configutation_b;
CREATE TABLE configutation_a;
INSERT INTO configutation_a (...);
CREATE TABLE configutation_b;
INSERT INTO configutation_b (...);
CREATE TABLE IF NOT EXIST user_data (...);
Это означает, что каждый раз, когда приложение запускается, я обновляю данные конфигурации, которые у меня есть на тот момент (именно поэтому мы используем http.get для получения любого файла конфигурации из удаленного репо в будущем) и создаю пользовательские данные, только если user_data таблицы там нет (надеюсь первоначальный запуск).
Вывод: на мой взгляд, всегда полезно доверять продукту базы данных на 100% и абстрактно позволять ему выполнять любую транзакцию, которая может подвергнуть вас некоторому риску, если вы внедрите себя в свой код; поскольку он дает инструмент для этого. Например, ключевое слово [если не существует] всегда безопаснее, чем реализация проверки таблицы самостоятельно.
Надеюсь, это поможет.
PS: Если вы ссылаетесь на процедуру создания базы данных, SQLite подключается к файлу базы данных, а он не существует, он создает его. Для тех, кому удобно в командной строке sqlite, когда вы вводите
sqlite3 /home/user/db/configuration.db соединит вас с этой базой данных и, если файла там нет, создаст его.
У вас есть награда за "уважаемый источник". при этом пока нет ответа. Есть риск, что вы не получили ответов, потому что люди упустили информацию из вашего вопроса. Теперь ваша награда может помешать людям задавать уточняющие вопросы, потому что они не чувствуют себя «уважаемыми». Я рекомендую добавить комментарий, явно запрашивающий все, что нуждается в разъяснении, и сделать все возможное, чтобы уточнить. Также попробуйте добавить информацию без подсказки. Вопрос кажется мне очень коротким и почти лишенным подробностей. Помните How to Ask и MRE от stackoverflow.com/tags/sqlite/info