2

在使用 node.js 和从 npm install sqlite3 (https://github.com/developmentseed/node-sqlite3/wiki/API) 安装的 sqlite3 包时,任何人都可以给我任何关于如何检查更新语句是否成功的建议

要执行更新,我正在执行以下操作:

    var id = req.params.id;
    var thing = req.body;
    stmt = db.prepare("UPDATE FOO set name=?, year=? where id=?");
    stmt.bind(thing.name, thing.year, id);
    stmt.run(function(err, result) {
        if (err) {
            res.send(JSON.stringify(err));
            res.send({'error':'An error has occurred'});
        } else {
            if (result) {
                console.log('Success: ' + JSON.stringify(result));
            }
            res.send(JSON.stringify(wine));
        }
    });

但是,从未定义结果。

如果我将 stmt.run() 更改为 stmt.all(),我会得到一个结果,但它似乎是空的 - 将它打印到控制台不会显示任何内容。

4

2 回答 2

3

result用于从SELECT查询返回的记录。

如果UPDATE命令失败,您将获得err.

要了解有多少记录已更新,请参阅changes

于 2013-01-20T17:14:39.273 回答
2

我遇到了这个问题,它返回未定义。我通过改变我的方法来修复它

从:

db.run(query, [data.isActive, data.id], (err) => {
    if (err) {
        console.log(err);
        res.status(500).send({'Response':'Error updating user', err });
    } else {
        console.log(`Rows affected: ${this.changes}`)
        res.status(200).send({'Response': 'Success updating'});
    };
});

到:

db.run(query, [data.isActive, data.id], async function (err) {
    if (err) {
        console.log(err);
        res.status(500).send({'Response':'Error updating user', err });
    } else {
        console.log(`Rows affected: ${this.changes}`)
        res.status(200).send({'Response': 'Success updating'});
    };
});

请注意第一行,我将其从箭头函数更改为异步函数。

于 2021-01-08T15:10:30.340 回答