我在 raspberry-pi 中有一个 sqlite3 数据库,我有一个将数据发送到 mongo db 服务器的脚本。一旦我将数据发送到 mongoDB,我就想删除该行。但我无法做到这一点,这是以下代码
var sqlite3 = require('sqlite3').verbose();
var sqlDB = new sqlite3.Database('Table23.db');
var mongodb = require('mongodb');
var MongoClient = mongodb.MongoClient;
var url = 'mongodb://192.168.0.87:27017';
var winston = require('winston');
var id_1;
winston.remove(winston.transports.Console);
winston.add(
winston.transports.File, {
filename: 'error.log',
level: 'info',
json: true,
timestamp: true,
handleException: true
}
);
sqlDB.serialize(function() {
sqlDB.each("SELECT * FROM Table23", function(err, row) {
var data = {
type: row.TYPE,
id: row.ID,
place: row.Place
};
var id = data.id;
id_1 = id;
MongoClient.connect(url, function(err, db) {
if (err) {
winston.error('Unable to connect'+ err);
} else {
console.log('Connection successful');
var collection = db.collection('testdb');
collection.insert([data], function(err, result) {
if (err) {
winston.error(err);
} else {
console.log('Inserted %d documents into the "Testdb" collection. The documents inserted with "_id" are:', result.length, result);
}
db.close();
});
}
});
sqlDB.run("DELETE FROM Table23 WHERE id=(?)",[id_1], function(err) {
if(err){
winston.error(err);
}
else{
console.log("Successful");
}
});
});
});
sqlDB.close();
当我运行这个时,我得到一个“errno”:21,“code”:“SQLITE_MISUSE”
最佳答案
使用each
函数的完成回调来执行下一个命令。然后在删除完成后关闭数据库。
var sqlDB = new sqlite3.Database('./abcd')
var id_1;
sqlDB.serialize(() => {
sqlDB.serialize(() => {
var n = 0;
sqlDB.each("SELECT * FROM Table23", function(err, row, i) {
let data = {
type: row.TYPE,
id: row.ID,
place: row.Place
};
var id = data.id;
id_1 = id;
}, ()=> {
sqlDB.run("DELETE FROM Table23 WHERE id=(?)", id_1, function(err) {
if(err){
console.log(err)
}
else{
console.log("Successful");
}
sqlDB.close();
});
});
});
});
关于node.js - SQLite:选择和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35008591/