So I am trying the following:
var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database('MyDB.db');
console.log("Initializing...")
var MyGUID = "d49dfb07-7ac9-42e7-a355-2707209baea5";
db.serialize(function() {
db.all("SELECT Name, Status FROM MyTable WHERE MyGUID = ? ", [MyGUID], function(err, rows) {
console.log(rows);
db.run("UPDATE MyTable SET readOnly = 0 WHERE MyGUID = 'd49dfb07-7ac9-42e7-a355-2707209baea5'", "", function(err) {
console.log(err);
});
});
});
db.close();
This results in “SQLITE_MISUSE: Database handle is closed” Apparently I cannot run the UPDATE query within the db.all callback. But why is that so?
Advertisement
Answer
You should put the second query as an argument to db.serialize(). Then it will wait for it to complete before returning and allowing db.close() to run.
db.serialize(function() {
db.all("SELECT Name, Status FROM MyTable WHERE MyGUID = ? ", [MyGUID], function(err, rows) {
console.log(rows)
});
db.run("UPDATE MyTable SET readOnly = 0 WHERE MyGUID = 'd49dfb07-7ac9-42e7-a355-2707209baea5'", "", function(err) {
console.log(err);
});
});