猫史档案馆


论常见的三种SQL报错()

用户:呵呵0486呵呵0486查看:24 回复:18 评论:24 创建时间:2022-08-02T09:11:33


一些萌新(比如我)在地图使用SQL的时候,总会遇到一些报错()然而又不知道怎么修()下面是几种常见的报错()以及它的处理方式()

--------------------------------

1.Error: sql error: Error: SQLITE_ERROR: incomplete input 这报错容易在自己添加数据时报错 拿一串代码举例()
async function initTable() {
    return await db.sql`
        CREATE TABLE IF NOT EXISTS "player" (
            "coin" INT NOT NULL,
            "exp" INT NOT NULL,
            "item" TEXT NOT NULL,
            "userKey" CHAR(16) PRIMARY KEY UNIQUE NOT NULL 
        )
    `;
}

async function saveUser(user) {
    await db.sql`
        INSERT INTO "player" (
            "exp",
            "coin",
            "item",
            "userKey"
        ) VALUES (
            ${user.exp},
            ${user.coin},
            ${JSON.stringify(user.item)}, 
            ${user.player.userKey}
        )
        ON CONFLICT("userKey")
        DO UPDATE SET
            "exp"=excluded."exp",
            "coin"=excluded."coin",
            "item"=excluded."item",
    `
}
async function loadUser(user) {
    const [data] = await db.sql`SELECT * FROM "player" WHERE "userKey"=${user.player.userKey} LIMIT 1`
    if (data) {
        user.exp = data.exp
        user.coin = data.coin
        user.item = JSON.parse(data.item)
    }
    else {
        saveUser(user)
    }
}

(这不就是API改了一点点嘛)

这段代码的错误在

async function saveUser(user) {
    await db.sql`
        INSERT INTO "player" (
            "exp",
            "coin",
            "item",
            "userKey"
        ) VALUES (
            ${user.exp},
            ${user.coin},
            ${JSON.stringify(user.item)}, 
            ${user.player.userKey}
        )
        ON CONFLICT("userKey")
        DO UPDATE SET
            "exp"=excluded."exp",
            "coin"=excluded."coin",
            "item"=excluded."item",--错误在这里
    `
}

百度翻译(?:错误:sql错误:错误:SQLITE错误:输入不完整(请无视这个())

解决方式:把逗号删掉即可()

2.Error: sql error: Error: SQLITE_ERROR: near "xxx": syntax error

这种报错我猜是最常见的()也是容易在添加数据时报错()

百度翻译:错误:sql错误:错误:SQLITE错误:靠近“xxx”:语法错误()(也请无视)

 

解决方式:

检查在报错提示的位置附近有没有漏掉逗号、双引号等其他符号,还有就是检查有没有把标点符号写成中文

3.Error: sql error: Error: SQLITE_ERROR: no such column: xxx

也是容易在添加数据时报错()

百度翻译:错误:sql错误:错误:SQLITE错误:没有这样的列:xxx(什么鬼())()

 

解决方式:

先检查有没有数据输入错误,如果有的话更正(废话)

如果任何一个数据你都没写错的话()

如果你之前已经创建了表的话()

那么:

删表!

注意:如果你的地图已经发布了,那么必须跑到游玩端再执行删表的命令()那么游玩端的所有数据就会丢失()所以建议大家把所有数据做完了再发布地图()如果不想删表就再创建个表格吧()

--------------------------------------------------------

这里只是举例了3种最常见的报错()欢迎评论区补充()

emotion_微笑emotion_doge()()

 


回复

上一页1 页 / 共 1下一页
呵呵0486呵呵0486

补:

Error: sql error: Error: SQLITE_CONSTRAINT: xxx constraint failed: xxx

检查一下你储存的数据违反你定义的规则()或者有没有定义()

API这样写的

因为我没遇到过这种报错 所以应该是这样的(?

点赞0


评论


呵呵0486呵呵0486

喵第二个帖子就吞了我一个排版()

点赞0


评论


果冻橙本人果冻橙本人

azzz

点赞0


评论


果冻橙本人果冻橙本人

center_image岛三咋就打不开了

点赞0


评论


yee剑走天下yee剑走天下

我就问问你什么时候实名认证了))))咋突然发帖)))emotion_doge

点赞0


评论


堂主の犬堂主の犬

awa!

点赞0


评论


黑色中王牌黑色中王牌

求助求助谁会pg数据库呀!!!:里面报错的图链接:https://box3.codemao.cn/e/c5ff93b1fe9060da1ae3

点赞0


评论


四季的板板四季的板板

SQL注入emotion_doge

点赞0


评论


爽快的小电鼠bMMb爽快的小电鼠bMMb

why我直接复制吉吉的还会错?

上代码:

async function initTable() {//创建玩家数据表
    return await db.sql`
        CREATE TABLE IF NOT EXISTS "player" (
            "coin" INT NOT NULL,--金币
            "exp" INT NOT NULL,--经验
            "item" TEXT NOT NULL,--物品列表
            "userKey" CHAR(16) PRIMARY KEY UNIQUE NOT NULL --用户识别码
        )
    `;
}

async function saveUser(user) {//玩家存档
    await db.sql`
        INSERT INTO "player" (-- player虽然是小写, 建议统一用""包住
            "exp",-- 经验
            "coin",-- 金币
            "item",-- 道具
            "userKey"-- 用户识别码
        ) VALUES (
            ${user.exp}, --尝试新建经验值
            ${user.coin}, --尝试新建金币值
            ${JSON.stringify(user.item)}, --尝试新建道具值
            ${user.player.userKey} --尝试新建当前玩家识别码
        )
        ON CONFLICT("userKey") -- 如果已经存在同样的用户识别码
        DO UPDATE SET
            "exp"=excluded."exp",-- 更新经验值
            "coin"=excluded."coin",-- 虽然是小写, 建议统一用""包住
            "item"=excluded."item"-- 虽然是小写, 建议统一用""包住
    `
}

async function loadUser(user) {//玩家读档
    const [data] = await db.sql`SELECT * FROM "player" WHERE "userKey"=${user.player.userKey} LIMIT 1`
    if (data) {//如果这个玩家已经有存档
        user.exp = data.exp
        user.coin = data.coin
        user.item = JSON.parse(data.item)
    }
    else {//玩家无存档
        saveUser(user)
    }
}

async function deleteUser(user) {//删除玩家存档
    await db.sql`DELETE FROM "player" WHERE "userKey"=${user.player.userKey}`
}

async function poll(fn, msg) {//无限轮询执行sql语句直到成功
    while (true) {
        try {
            return await fn()//一旦成功执行, 停止无限轮询, 并返回查询结果
        } catch (e) {
            const m = e.message//需要简略显示的异常消息
            //sql偶尔会执行超时, 但如果反复显示timeout 15秒以上一直不停, 大概是数据库出了故障只能等官方修复
            if (m.includes('timeout')) {
                world.say(m)
            }
            else {
                world.say(msg || e.stack)//如果sql执行出错, 广播错误消息, 用来排查错误原因
            }
        }
        await sleep(2000) //每2秒重试一次
    }
}





poll(initTable, '等待数据库启动中...')

点赞0


评论


爽快的小电鼠bMMb爽快的小电鼠bMMb

再补一段代码:

world.onPlayerJoin(async ({ entity }) => {
    entity.player.exp = 10;
    entity.player.coin = 100;
    entity.player.item = []
    await loadUser(entity)//尝试读取存档
    entity.player.onPress(async ({ button }) => {//右键显示状态栏
        if (button == Box3ButtonType.ACTION1) {
            await entity.player.dialog({
                type: Box3DialogType.SELECT,
                content: `
                金币:${entity.coin}
                经验:${entity.exp}
                道具:[${entity.item}]
                `,
            })
        }
    })
})


world.onPlayerLeave(async({entity}) => {
    await saveUser(entity)
})

点赞0


评论


Star_Ink_sansStar_Ink_sans

喵d

点赞0


评论


呵呵0486呵呵0486

d(?

点赞0


评论


我爱Kitten我爱Kitten

实际上,sql的语法真的很少()()(),少的可怜()()(),所以:()()()

Error()一般()都是细节()(?)

点赞0


评论


好奇的土岩龙HHaS好奇的土岩龙HHaS

Error : sql error : Error: SQLITE_ERROR: table player has no column named at

点赞0


评论


一个STUB用户_6715468一个STUB用户_6715468

补:attempt to write a readonly database

无法写入只读数据库

也就是说,不找官方修不好(((

点赞0


评论


艾博士艾博士

学到了学到了,赶快复制(bushi

点赞1


评论


呵呵0486呵呵0486

被谁挖出来的)

点赞0


评论


AokenAoken

喵d

点赞0


评论