[ACCEPTED]-Sqlite SQLITE_MISUSE error in node.js script-sqlite
You've got a race condition; it's possible 18 that your last query (whose callback closes 17 the connection) will finish before one of 16 the earlier queries did, and that will, needless 15 to say, hose the earlier query. You need 14 to rework your code so that the last query 13 to finish, rather than the last query to start, closes 12 the connection (e.g set a counter to the 11 number of queries and have each query decrement 10 it when it finishes. The one that decrements 9 it to zero closes the connection).
You might 8 also want to look at the serialize
method that's 7 available on database objects. Right now 6 your initialization queries are all independent 5 of each other, but if you started using 4 foreign-key constraints you'd have trouble 3 if the referenced table hadn't been created 2 yet, so you'd need to force the order of 1 execution.
Use Promises.
Here I get data from one table and use this 5 data to create a statement for inserting 4 in another table.
serialize()
do run 1-by-1 but I wanted 3 the response from one query to be used in 2 another. If I put 2nd
query in callback of 1 1st
then it gives the SQLITE_MISUSE
error
db.serialize(()=>{
// QUERY 1 (SELECT) - Get data
let promiseGetFoo = new Promise((resolve, reject) => {
db.all("SELECT * FROM foo", (err, rows) => {
if (err) {
console.log(err);
reject(err);
} else {
resolve(rows);
}
});
});
// QUERY 2 (INSERT) - Use data from QUERY 1
promiseGetFoo.then((res) => {
let stmt = (res) => {
// code to create INSERT statement
}
db.run(stmt, (err) => {
if(err) console.log(err);
else console.log(">>> Insert DONE");
closeDb();
});
});
});
let closeDb = () => {
db.close() ;
}
More Related questions
We use cookies to improve the performance of the site. By staying on our site, you agree to the terms of use of cookies.