首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在INSERT语句后执行UPDATE语句时出现node-sqlite3错误

在INSERT语句后执行UPDATE语句时出现node-sqlite3错误
EN

Stack Overflow用户
提问于 2018-08-14 05:19:55
回答 1查看 446关注 0票数 0

我正在尝试通过它们的itemIdquantities将一些项插入到我的sqlite3数据库中,然后通过将它们与另一个表items的itemId进行比较来更新这些插入的项。

我已经将所有东西都包装在Promise中,试图实现这一点,但还没能让它运行起来。

代码语言:javascript
复制
function makeOrderHandler(request, response, data) {
    insertOrder(request, response, data)
        .then(() => updateItemNames(request, response, data))
        .then(() => {
          console.log("Updated items!");
        })
        .catch(err => {
          console.log("Caught error: "+err);
        }); // end promise chain

} // end makeOrderHandler

function insertOrder(request, response, data) {
  return new Promise(function(resolve, reject) {
    var db = require('./DBManager.js').getPool();

    for(let i = 0; i < data['content'].length; i++) {
      let unit = data['content'][i];

      db.run("INSERT INTO orderedItems"
        + " (itemId, quantity) VALUES"
        + " ($itemId, $quantity);",
      {
        $itemId: unit.itemId,
        $quantity: unit.quantity
      },
      function(err) {
        if(!err) {
          // Could do something here
        } else {
          reject("SQLite3 insert error: "+err);
        } // end else
      }); // end run
    } // end for
    resolve();

  }); // end return
} // end makeOrder

function updateItemNames(request, response, data) {
  return new Promise(function(resolve, reject) {
    var db = require('./DBManager.js').getPool();

    db.run("UPDATE orderedItems, menuItems SET orderedItems.itemName = menuItems.itemName, orderedItems.unitPrice = menuItems.unitPrice WHERE orderedItems.itemId = menuItems.itemId;",
      function(err) {
        if(err) {
          reject("SQLite3 update error: "+err);
        } else if(this.changes == 1) {
          resolve();
        } else {
          reject("NOTHING DONE!!!");
        } // end else
      } // end error
    ); // end run
    // resolve();

  }); // end return
} // end updateItemNames

抛出的错误似乎来自updateItemNames()函数:

Caught error: SQLite3 update error: Error: SQLITE_ERROR: near ",": syntax error

也许我需要重新构造我的SQL表,或者以另一种顺序调用东西?我对SQL的理解还不够深入,但我确实在sqlfiddle上做过同样的尝试,SQL语句看起来还不错,所以这看起来像是JavaScript/异步问题。我还尝试在不使用WHERE条件的情况下更新orderedItems表,以与menuItems表进行比较,并且成功了。因此,当我将orderedItems.itemIdmenuItems.itemId进行比较时,似乎出现了一个问题。

EN

回答 1

Stack Overflow用户

发布于 2018-08-15 22:42:39

将查询更改为包含子查询(以某种方式)解决了我的问题:

代码语言:javascript
复制
db.run("UPDATE orderedItems"
  + " SET itemName ="
  + "     ("
  + "      SELECT menuItems.itemName"
  + "      FROM menuItems"
  + "      WHERE menuItems.itemId = orderedItems.itemId"
  + "     ),"
  + "     unitPrice ="
  + "     ("
  + "      SELECT menuItems.unitPrice"
  + "      FROM menuItems"
  + "      WHERE menuItems.itemId = orderedItems.itemId"
  + "     )"
  + " WHERE"
  + "     EXISTS "
  + "         ("
  + "          SELECT *"
  + "          FROM menuItems"
  + "          WHERE menuItems.itemId = orderedItems.itemId"
  + "         );"
...

正如我前面提到的,当使用MySQL在sqlfiddle上测试时,查询工作得很好,所以我想知道SQLite3是否有必要使用子查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51830724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档