为什么这个SQLite插入语句不起作用

时间:2013-12-13 06:36:12

标签: sqlite cordova insert prepared-statement bulkinsert

任何人都可以告诉我为什么以下两个sql lite插入语句正在工作:

tx.executeSql("INSERT INTO EVENTS ('name','altId','time') VALUES (?,?,?)",["one", "two","three"]);

tx.executeSql("INSERT INTO EVENTS ('name','altId') VALUES (?,?)",[("one", "two"),("three", "four")]);

但我在下面的陈述中提到this question之后的答案:

tx.executeSql("INSERT INTO EVENTS ('name','altId','time') VALUES (?,?,?)",[("one", "two","three"),("four", "five","six")]);

抛出错误:语句字符串中的5个'?'与参数计数

不匹配

1 个答案:

答案 0 :(得分:0)

您必须提供与SQL语句中完全相同的参数。 如果要多次执行该语句,则必须告诉计算机多次执行该语句:

tx.executeSql("INSERT INTO EVENTS (name,altId,time) VALUES (?,?,?)",
              ["one", "two","three"]);
tx.executeSql("INSERT INTO EVENTS (name,altId,time) VALUES (?,?,?)",
              ["four", "five","six"]);

多行插入(在所有SQLite版本中都不支持,所以你不应该使用它)只是一个带有更多参数的SQL语句:

tx.executeSql("INSERT INTO EVENTS (name,altId,time) VALUES (?,?,?),(?,?,?)",
              ["one", "two","three","four", "five","six"]);

编写一个多次调用单行INSERT的辅助函数可能是个更好的主意。