使用 executeSql 插入多个

Posted

技术标签:

【中文标题】使用 executeSql 插入多个【英文标题】:Muiltples insert using executeSql 【发布时间】:2017-07-07 22:37:53 【问题描述】:

我需要进行多次插入,但我不知道出了什么问题。见:

 db.openDatabase(
      name: "data.db",
      location: "default"
    ).then(() => 
      db.executeSql(
        +"INSERT INTO check_item (name) VALUES ('Pneus - calibragem'); "
        +"INSERT INTO check_item (name) VALUES ('Pneus – banda de rodagem'); "
        +"INSERT INTO check_item (name) VALUES ('Nivel do oleo'); "
        +"INSERT INTO check_item (name) VALUES ('Luzes dianteiras'); "
        +"INSERT INTO check_item (name) VALUES ('Luzes traseiras'); "
        +"INSERT INTO check_item (name) VALUES ('Triangulo de sinalizacao'); "
        +"INSERT INTO check_item (name) VALUES ('Chave de roda'); "
        +"INSERT INTO check_item (name) VALUES ('Documentacao do veiculo'); ", ).then((data) => 
          console.log("TABLE CREATED: ", data);
        , (error) => 
          console.error("Unable to execute sql teste", error);

        )
    , (error) => 
      console.error("Unable to open database", error);
    );

我该如何解决这个问题?

【问题讨论】:

还有什么问题? @rkosegi 不插入银行。 【参考方案1】:

您当前正尝试在对executeSql() 的一次调用中执行多个插入语句。在一条语句中插入多条记录的语法是:

INSERT INTO check_item (name)
VALUES ('Pneus - calibragem'),
       ('Pneus – banda de rodagem'),
       ('Nivel do oleo'),
       ...
       ('Documentacao do veiculo');

如果您想防止插入已经存在的名称,最简单的方法可能是在name 列上添加唯一约束。虽然在 SQLite 中不重新创建表是不可能做到这一点的,但我们可以添加一个唯一索引来获得相同的效果:

CREATE UNIQUE INDEX name_index ON check_item (name);

延伸阅读:How to add unique constraint in already made table in sqlite ios?

【讨论】:

谢谢你。我只想在记录不存在时插入。我该怎么做? 所以在创建表格时我应该把“名称”作为唯一的,对吧? 是的,将此行添加到您的CREATE TABLE 语句中:CONSTRAINT name_constraint UNIQUE (name)【参考方案2】:

插入到 tbl_name (a,b,c) 价值观 (1,2,3), (4,5,6), (7,8,9);

【讨论】:

以上是关于使用 executeSql 插入多个的主要内容,如果未能解决你的问题,请参考以下文章

EXEC与sp_executesql的区别及应用

sp_executesql介绍和使用

sp_executesql介绍和使用

实体框架可以在不访问 sp_executesql 的情况下执行存储过程吗?

使用 sp_executesql 的非最佳执行计划

将表变量与 sp_executesql 一起使用