0

所以过去几天我一直在尝试为我的 Discord 机器人制作货币系统和库存系统。但是,我似乎根本无法取得任何进展。我试过使用 sequelize 和 better-sqlite3 (这是我目前正在使用的),但都没有成功。

const table = sql.prepare("SELECT count(*) FROM sqlite_master WHERE type ='table' AND name = 'balance';").get();
if (table["count(*)"] === 0) {
  console.log("creating table...");
  sql.prepare("CREATE TABLE scores (id TEXT PRIMARY KEY, user TEXT, guild TEXT, money INTEGER);").run();
  sql.prepare("CREATE UNIQUE INDEX idx_scores_id ON scores (id);").run();
  sql.pragma("synchronous = 1");
  sql.pragma("journal_mode = wal");
}

client.getScore = sql.prepare("SELECT * FROM balance WHERE user = ? AND guild = ?");
client.setScore = sql.prepare("INSERT OR REPLACE INTO money (id, user, guild, money) VALUES (@id, @user, @guild, @money);");

上面的代码导致这个错误:

(node:13036) UnhandledPromiseRejectionWarning: SqliteError: table scores already exists

我对这样的东西没有太多的了解,因为可供我参考的材料太少了。

4

1 回答 1

1

这是验证表的不好方法。你应该IF NOT EXISTS改用。请参阅此问题以供参考:

来自http://www.sqlite.org/lang_createtable.html

CREATE TABLE IF NOT EXISTS some_table (id INTEGER PRIMARY KEY AUTOINCREMENT, ...);

您也可以IF NOT EXISTS用于您的索引。

将来,我建议您在研究和提问时关注您遇到问题的特定技术。事实上,有很多关于 sqlite 正确使用模式的材料 - 但你必须专门搜索并询问 sqlite。

在这个问题中,例如你问在discord.js中做一个货币和库存系统,但是这里没有discord.js代码,错误是sqlite错误,并且搜索“如何创建表只有如果它没有'不存在 sqlite" 会将您带到上面的链接。简而言之,搜索您正在使用的特定技术,而不是整个项目。

话虽如此,这里还有一个关于使用 discord.js 创建货币系统的“官方非官方”资源:https ://discordjs.guide/sequelize/currency.html - 但它使用 sequelize,所以你可能找不到它有帮助。

于 2020-06-19T15:01:03.047 回答