使用javascript对象作为sqlite3插入值的最简单的解决方案是什么?以下代码不起作用。
const values = {
name: 'John',
age: 34,
language: 'english'
};
db.run('INSERT INTO tablename VALUES (?)', values, (err) => {
if (err) {
console.log(err);
} else {
console.log('success');
}
});
答案 0 :(得分:2)
首先,您需要正确编写SQL。
要插入列name, age, language
,
你需要像这样编写SQL:
INSERT INTO tablename (name, age, language) VALUES (?, ?, ?)
并传递3列的值作为参数。
db.run('INSERT INTO tablename (name, age, language) VALUES (?, ?, ?)', [values['name'], values['age'], values['language']]), (err) => { ... });
或者,如果JavaScript对象中的属性名称直接对应于列名,那么您可以动态生成正确的SQL字符串以获得更大的灵活性:
const cols = Object.keys(values).join(", ");
const placeholders = Object.keys(values).fill('?').join(", ");
db.run('INSERT INTO tablename (' + cols + ') VALUES (' + placeholders + ')', Object.values(values)), (err) => { ... });
答案 1 :(得分:1)
尝试?,?,?
和Obj.values()
代码。
const values = {
name: 'John',
age: 34,
language: 'english'
};
paramString = "?";
for (var i = 0; i < Object.keys(values).length -1 ; i ++) paramString += ",?";
// db.run('INSERT INTO tablename VALUES ('+paramString + ')', Object.values(values));
console.log('INSERT INTO tablename VALUES ('+paramString + ')',Object.values(values));
&#13;