【问题标题】:execute update query inside db.each在 db.each 中执行更新查询
【发布时间】:2018-05-08 23:40:37
【问题描述】:

我正在使用 javascript 和 sqlite 并尝试在 AJAX 发布成功后在 SELECT 查询中运行 UPDATE 查询。 SELECT 和 AJAX 发布成功,但在 UPDATE 时,返回错误:Error: SQLITE_BUSY: database is locked

var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database('sqlite-database.db');

db.serialize(function(){

        db.each("SELECT id_sales, id_customer, date FROM sales where syncstatus = 0", function(err, row) {

        id_sales = row.id_sales;
        id_customer = row.id_customer;
        date = row.date;

        $.ajax('http://localhost/newserver/sales/sync_sales', {
            type: 'POST',
            async: false,
            data: { id_sales_ori: id_sales, id_customer:id_customer, date: date },
            success: function (data, status, xhr) {


                var sqlite3 = require('sqlite3').verbose();
                var db = new sqlite3.Database('sqlite-database.db');

            db.run("UPDATE sales set syncstatus = $status WHERE id_sales = $id_sales",{
                $id_sales: id_sales,
                $status: 1,
            },function (err,rows){
                if (err === null){
                console.log("syncstatus update to 1");
                }else{
                console.log(err);
                }
            });

            },
            error: function (jqXhr, textStatus, errorMessage) {
                    console.log("fail sync");
                    stat[id_sales] = 0;
                }
        });        

    });
});
db.close();

请帮助我如何在 db.each 中正确执行 UPDATE 查询。

【问题讨论】:

    标签: javascript json ajax sqlite


    【解决方案1】:

    这只是因为您正在第二次打开数据库,而它已经在进行中或正在使用中。

     $.ajax('http://localhost/newserver/sales/sync_sales', {
                type: 'POST',
                async: false,
                data: { id_sales_ori: id_sales, id_customer:id_customer, date: date },
                success: function (data, status, xhr) {
    
                    //..........try removing these two lines............
                    var sqlite3 = require('sqlite3').verbose();
                    var db = new sqlite3.Database('sqlite-database.db');
    
                db.run("UPDATE sales set syncstatus = $status WHERE id_sales = $id_sales",{
                    $id_sales: id_sales,
                    $status: 1,
                },function (err,rows){
                    if (err === null){
                    console.log("syncstatus update to 1");
                    }else{
                    console.log(err);
                    }
                });
    
                },
                error: function (jqXhr, textStatus, errorMessage) {
                        console.log("fail sync");
                        stat[id_sales] = 0;
                    }
            }); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-16
      • 2018-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多