【发布时间】:2019-10-29 03:02:20
【问题描述】:
我发现我在使用带有 sqlite3 版本 4.1.0 的参数化插入语句时遇到了麻烦。这是一个演示错误的基本示例:
let sqlite3 = require("sqlite3");
let data = [
[1, 1, 1],
[2, 2, 2],
[3, 3, 3]
];
let db = new sqlite3.Database(":memory:")
.run(`CREATE TABLE TEST(
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
count INTEGER NOT NULL,
xPos REAL NOT NULL,
yPos REAL NOT NULL
)`, (err) => {
if (err) {
console.log(err);
} else {
insertRecords();
}
});
insertRecords = () => {
db.all(`INSERT INTO TEST(count, xPos, yPos) VALUES(?,?,?)`, data, (err, rows) => {
if (err) {
console.log(err);
} else {
for (let i = 0; i < rows.length; i++) {
console.log(rows[i]);
}
}
});
};
如果我执行该代码,我将收到以下错误:
[Error: SQLITE_CONSTRAINT: NOT NULL constraint failed: TEST.count] {
errno: 19,
code: 'SQLITE_CONSTRAINT'
}
问题出现在insertRecords 的第一行。在那里,我尝试使用一组数据将几条记录推送到数据库中。根据几个消息来源,这应该是要走的路。
似乎无论我做什么,参数data似乎都没有被正确解析。我尝试了使用准备好的语句和其他允许我传递params 参数的方法的类似构造。
现在很可能我正在做一些愚蠢的事情,但是我测试了很多东西并且我没有想法。其他人有同样的问题吗?
【问题讨论】: