SQLite Importer перезапишет мою базу данных при загрузке приложения?

У меня есть приложение Ionic, использующее SQLite. У меня нет проблем с реализацией. Проблема в том, что мне нужно импортировать файл SQL с помощью SQLitePorter, чтобы заполнить базу данных информацией о конфигурации. Но также в той же базе данных у меня есть информация о пользователе, поэтому мой вопрос:

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

У вас есть награда за "уважаемый источник". при этом пока нет ответа. Есть риск, что вы не получили ответов, потому что люди упустили информацию из вашего вопроса. Теперь ваша награда может помешать людям задавать уточняющие вопросы, потому что они не чувствуют себя «уважаемыми». Я рекомендую добавить комментарий, явно запрашивающий все, что нуждается в разъяснении, и сделать все возможное, чтобы уточнить. Также попробуйте добавить информацию без подсказки. Вопрос кажется мне очень коротким и почти лишенным подробностей. Помните How to Ask и MRE от stackoverflow.com/tags/sqlite/info

Yunnosch 26.12.2020 09:43
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
1
204
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я предполагаю, что вы всегда можете инициализировать свою таблицу, используя строковые запросы внутри своего кода. Проблема не в том, что вы импортируете файл .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 соединит вас с этой базой данных и, если файла там нет, создаст его.

Другие вопросы по теме