任何人都可以告诉我为什么以下两个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个'?'与参数计数
不匹配答案 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的辅助函数可能是个更好的主意。