我的 discord.js 机器人的 sql 没有/不能从我的 sqlite3 db 定义一个表

Posted

技术标签:

【中文标题】我的 discord.js 机器人的 sql 没有/不能从我的 sqlite3 db 定义一个表【英文标题】:My discord.js bot's sql doesn't/cant define a table from my sqlite3 db 【发布时间】:2021-07-28 07:57:04 【问题描述】:

现在已经为此工作了大约 3 天,但我尝试过的所有方法都没有奏效。是的,我的代码/可能很草率,但似乎无法从我拥有的 data.db 中获取表格。

那里至少有一张表有我的用户名和东西,但它确定它是未定义的。

else
        const pr1 = new Promise( useless => 
        sql.get(`SELECT * FROM data WHERE userid ="$message.author.id"`))
        .then(row => 
            if (!row) 
                sql.run("INSERT INTO data (userid, rollsleft, registered) VALUES (?, ?, ?)", [message.author.id, 4, 1]);
                db.close()
            
        ).catch(error => 
            console.log(error)
            sql.run("CREATE TABLE IF NOT EXISTS data (userid INTEGER, rollsleft INTEGER, registered INTEGER)")
            .then(() => 
                sql.run("INSERT INTO data (userid, rollsleft, registered) VALUES (?, ?, ?)", [message.author.id, 4, 1]);
                db.close()
            );
        );

我确实遇到了一个错误。

Error: SQLITE_RANGE: column index out of range errno: 25, code: 'SQLITE_RANGE', stack: 'Error: SQLITE_RANGE: column index out of range', message: 'SQLITE_RANGE: column index out of range'

【问题讨论】:

【参考方案1】:

我认为您对 better-sqlite3 的工作原理有些困惑。

首先定义你正在使用的 npm 包:

const database = require('better-sqlite3');

现在定义数据库和数据库名称 - 当您运行机器人时,这会在物理上创建一个空数据库文件。

const sql = new Database('foobar.db');

现在是向数据库文件添加一个表。

let row = sql.get('SELECT * FROM tblExample WHERE id ="$message.author.id"').run();
//runs a select query using the table name "tblExample" byval row "id"

if(!row)  //i.e if the table "tblExample" doesnt exist (or if there are no rows that match) - in this case if you have set up the table in the right way it will be because the table doesn't exist

sql.prepare('CREATE TABLE IF NOT EXISTS tblExample ("id", "columns_go_here")').run();
//creates the table if it doesnt already exist
;

//then you can populate the database by using an "INSERT" statement
sql.prepare('INSERT INTO tblExample VALUES ("1111", "example")').run();

//and if you need to pull data from it use the same statement as you first used
let row = sql.get('SELECT * FROM tblExample WHERE id ="1111"').run();

//then you should be able to do
let exampleData = row.columns_go_here;
//this exampleData variable should hold the value "example" - lets console.log() it
console.log(exampleData);
//if you see "example" in your console your database is working

如果您有任何问题,请发表评论,希望过度评论有所帮助。

查看文档here

【讨论】:

以上是关于我的 discord.js 机器人的 sql 没有/不能从我的 sqlite3 db 定义一个表的主要内容,如果未能解决你的问题,请参考以下文章

discord.js 机器人播放音频但没有声音?

即使没有任何错误,我的 discord.js 机器人也不会回复用户消息 [重复]

为啥我的 node.js discord.js 机器人不发送文件? (没有错误)(可以发送消息)

discord.js 机器人在没有声音的情况下播放音频

为我的 discord.js 机器人创建一个排名列表

discord.js Bot 重启前没有看到消息