SQLite导入程序将在我加载应用程序时覆盖我的数据库



我有一个使用SQLite的Ionic应用程序。我在执行方面没有任何问题。问题是,我需要使用SQLitePorter导入一个SQL文件,以便用配置信息填充数据库。但是,在同一个数据库上,我有用户信息,所以我的问题是:

每次我启动应用程序时,它都会导入sql文件,填充数据库,并可能覆盖我的用户数据?既然都在同一个基地上

我假设您总是可以在代码中使用字符串查询来初始化表。问题不在于您正在导入.sql文件。正确的根据https://www.sqlitetutorial.net/sqlite-create-table/很明显,您总是使用[IF NOT EXISTS]开关创建一个表。编写一个类似的查询

CREATE TABLE [IF NOT EXISTS] [schema_name].table_name (
column_1 data_type PRIMARY KEY);

您可以让sqlite决定是否要创建一个有覆盖现有表风险的表。假设您可以相信sqlite足够智能,不会覆盖任何信息,尤其是当您使用"BEGIN TRANSACTION"-"COMMIT"过程时。

我给出的答案假设您已经在不同的表中导入了数据和用户数据,这样您就可以操作您填充的内容和不填充的内容。是这样吗?

我通常做的是有一个类似于这样的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从远程repo获取任何配置文件(,并且只有在不存在user_data表的情况下才创建用户数据(希望是初始启动(。

结论:在我看来,100%信任数据库产品并抽象地让它进行任何交易总是一种很好的做法,如果你在代码中实现了自我,这些交易可能会给你带来一些风险;因为它提供了一个工具。例如,关键字[如果不存在]总是比自己实现表检查器更安全。

我希望这能有所帮助。

PS:如果你在创建数据库过程中提到SQLite,它连接到一个数据库文件,但它不存在,它会创建它。对于熟悉SQLite命令行的人来说,当你键入时

sqlite3/home/user/db/configuration.db会将您与此数据库连接起来,如果文件不在那里,它会创建它。

最新更新