sqlite3执行UPDATE命令后BLOB类型字段未更新问题求助
常见原因及对应解决方法
- 参数类型错误:你代码里的
image变量必须传入multer返回的文件buffer属性,也就是req.file.buffer,如果误传了整个文件对象、base64字符串或者其他非Buffer类型的数据,sqlite3会默认将其转为普通字符串存储,不会抛出错误但实际存储的值不符合预期,看起来就像更新失败。 - 未匹配到目标行:
UPDATE语句执行时如果没有匹配到满足WHERE id=2条件的行,不会触发报错但不会修改任何数据。你可以在回调函数里打印this.changes,这个值代表本次操作实际影响的行数:如果值为0,说明USER表中不存在id为2的记录,需要检查id参数是否正确。 - 表名是保留关键字:
USER属于SQLite的保留关键字,直接作为表名使用可能出现解析异常,建议给表名加上反引号包裹,修改SQL语句为:const stmt = 'UPDATE `USER` SET image=? WHERE id = ?'; - 读取验证逻辑错误:如果
this.changes返回值为1,说明更新已经执行成功,大概率是你后续查询BLOB字段的逻辑错误,没有正确将存储的二进制数据转为可使用的Buffer格式,误以为没有更新成功。 - 多数据库文件混淆:检查你连接的数据库路径是否正确,是否存在多个同名数据库文件,你更新的和后续查询的不是同一个文件。
内容的提问来源于stack exchange,提问作者AfekC
相关产品推荐
相关产品推荐

