如何防止sqlite在Node中创建多个数据库条目

时间:2018-02-19 23:04:24

标签: javascript node.js sqlite

我有2个函数用于根据用户ID访问单个数据库中的不同列。如果ID在数据库中没有行,我会在数据库中为该ID创建一个新行。但是,当我将这两个函数调用在一起时,程序最终会创建2个具有相同ID的新行,每个数据类型对应一个。

exports.addXp = (id, amt) => {
  db.get(`SELECT userId, xp FROM userData WHERE userId = ?`, [id], (err, row) => {
    if (err) return console.error(err.message);
    if (!row) {
      db.run(`INSERT INTO userData (userId, xp) VALUES (?, ?)`, [id, amt], (err) => {
        if (err) console.error(err.message);
      });
    } else {
      db.run(`UPDATE userData SET xp = ? WHERE userId = ?`, [row.xp + amt, id], (err) => {
        if (err) console.error(err.message);
      })
    }
  });
}

exports.addBal = (id, amt) => {
  db.get(`SELECT userId, bal FROM userData WHERE userId = ?`, [id], (err, row) => {
    if (err) return console.error(err.message);
    if (!row) {
      db.run(`INSERT INTO userData (userId, bal) VALUES (?, ?)`, [id, amt], (err) => {
        if (err) console.error(err.message);
      });
    } else {
      db.run(`UPDATE userData SET bal = ? WHERE userId = ?`, [row.bal + amt, id], (err) => {
        if (err) console.error(err.message);
      })
    }
  });
}

然后我将这些称为:

data.addXp(message.author.id, Math.floor(Math.random()*11 + 10));
data.addBal(message.author.id, Math.floor(Math.random()*3 + 3));

但是,如果数据库中不存在用户ID,则最后添加2行,其中一行具有用户ID和bal,一行具有ID和xp,而不是一行所有的价值观。我该如何解决这个问题?

0 个答案:

没有答案