angular - 离子 - 如何一次将数据添加到 sqlite 数据库表?
问题描述
我有一个sqlite
数据库,我想在用户第一次打开应用程序时添加一些默认应用程序设置,但是每次我初始化应用程序时,数据都会添加到表中。
这是我的sql文件内容:
CREATE TABLE IF NOT EXISTS settings(name TEXT, value BLOB);
-- INSERT or IGNORE INTO settings(name, value) VALUES ('user_lang', 'ru');
-- INSERT or IGNORE INTO settings(name, value) VALUES ('notifications', false);
-- INSERT or IGNORE INTO settings(name, value) VALUES ('font_size', '1em');
这个片段我用文件中的一些 sql 查询为数据库播种:
createDatabaseObject() {
this.plt.ready().then(() => {
this.sqlite.create({
name: 'appdb.db',
location: 'default'
})
.then((db: SQLiteObject) => {
this.database = db;
this.seedDatabase();
});
});
}
seedDatabase() {
// Load settings
this.http.get('assets/app_database.sql', { responseType: 'text'})
.subscribe(sql => {
this.sqlitePorter.importSqlToDb(this.database, sql)
.then(_ => {
this.loadSettings();
this.dbReady.next(true);
})
.catch(e => console.error(e));
});
}
我在我的 sql 文件中尝试了另一种使用 if 语句的解决方案,但它给出了一个错误:
Failed to import SQL; message=sqlite3_prepare_v2 failure: near "IF": syntax error
IF (SELECT COUNT(*) FROM settings) = 0
BEGIN
INSERT INTO settings (value, name)
VALUES
('user_lang','ru'),
('notifications', false),
('font_size','1em');
END
ELSE
BEGIN
SELECT COUNT(*) FROM settings
END
解决方案
所以这是小菜一碟!!通过将UNIQUE添加到列名OR IGNORE
运算符将生效。
CREATE TABLE IF NOT EXISTS
settings (
name TEXT UNIQUE,
value BLOB
);
INSERT OR IGNORE INTO settings (name, value)
VALUES
('user_lang', 'ru'),
('notifications', false),
('font_size', '1em');
推荐阅读
- sql - 带有子选择的 SQL 条件连接
- firebase - firebase 云功能:使用锐利库创建缩略图不会生成访问令牌
- .net - 从 Wix 安装程序中的自定义操作运行 .Net 安装程序?
- windows - 仅用于标准输出的 cmd 和 powershell 的替代品
- excel - VBA中的半冒号分隔的csv
- shell - Shell Runner 内的 Curl Upload-File
- php - Swift 中的 HTTP Post 到 PHP 给出 code=3840
- ruby-on-rails - Docker:Nginx - 在上游找不到 [emerg] 主机
- javascript - 如何在循环内的Angular模板上的div中动态命名引用
- javascript - valuegetter、valueparser 和 valueformatter 的区别 - Ag-grid