2016-01-26 5 views
1

У меня есть база данных sqlite3 в малине-пи, у меня есть скрипт, который отправляет данные на сервер mongo db. Как только я отправлю данные в mongoDB, я хочу удалить строку. Но я не в состоянии сделать это, вот код для следующегоSQLite: SELECT и DELETE

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, «код»: «SQLITE_MISUSE»

ответ

1

Используйте завершение обратный вызов функции 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(); 
      }); 

     }); 
    }); 
}); 
+0

Я пробовал метод, который вы предлагали, нет ошибки, но ничего не удаляется из базы данных. Я не понимаю, почему. Любая идея почему? –

+0

@AnkKhandelwal: Только что обновленные ответы, на которые вы отвечали. Предыдущий ответ был недостаточно подробным. Это работает. Попробуйте и дайте мне знать! – chriskelly

+0

Это сработало :) Спасибо! –