Я обнаружил, что у меня проблемы с использованием параметризованных операторов вставки с версией 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
.
Теперь вполне возможно, что я делаю что-то глупое, но я протестировал довольно много вещей, и я 'м из идей. У кого-нибудь еще есть такая же проблема?