You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite UPDATE操作无效果:数据库条目拆分后原行未更新

问题排查与修复

核心问题:条件判断逻辑错误

你当前的条件row.francais.search("/") != 0无法正确筛选出包含‘/’的条目:

  • 当字符串里没有‘/’时,search("/")返回-1,-1 != 0成立,会进入不必要的逻辑(但此时split后数组只有一个元素,更新内容和原内容一致,所以数据库无变化)
  • 当字符串以‘/’开头时,search("/")返回0,条件不成立,会跳过本该处理的条目

正确的条件应该是判断字符串确实包含‘/’,用includes或者search !== -1均可。

修正后的代码

async function mutator(id, french, pierrick){
    return new Promise((resolve, reject) => {
        const sql = "UPDATE dictionnaire SET francais = ?, pierrick = ? WHERE id = ?";
        db.run(sql, [french, pierrick, id], (err) => {
            if (err) {
                console.log(err);
                reject(err);
            } else {
                // db.run的回调没有row参数,直接resolve即可
                resolve();
            }
        });
    });
}

// 修正条件判断
if (row.francais != null && row.francais.includes("/")) {
    let synonyms = row.francais.split("/");
    await mutator(row.id, synonyms[0], row.pierrick);
    for (let i = 1; i < synonyms.length; i++) {
        await setter(row, synonyms[i], row.pierrick);
    }
}

额外优化说明

  1. mutator函数里的Promise不需要用async包裹,内部没有await操作,直接用普通函数即可
  2. db.run的回调本身没有row参数,原来的resolve(row)会返回undefined,直接resolve()更合理

内容的提问来源于stack exchange,提问作者Awing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 13:30:47