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

Express使用SQLite无法连接磁盘数据库 仅连接内存数据库问题求助

问题核心原因

你遇到的现象本质是实际连接的SQLite文件不是你用DB Browser创建的admin.db,sqlite3库在目标路径不存在对应文件时会自动创建空白数据库,不会抛出异常,所以你会看到连接成功但查不到已有数据,看起来像是连接了内存数据库。

修复步骤

  1. 修正数据库路径写法
    Node.js 中的相对路径是相对于进程启动时的工作目录,不是相对于当前JS文件的存放路径,你当前使用的../admin.db会根据你启动项目的位置变化,大概率指向的不是你预期的文件位置。
    使用path模块拼接绝对路径保证定位准确,修改代码如下:
    首先在文件头部引入path模块:
const path = require('path')

再修改数据库连接逻辑:

// 适配admin-route.js在routes目录、admin.db在项目根目录的文件结构
const dbPath = path.join(__dirname, '../admin.db')
let db = new sqlite.Database(dbPath, (err) => {
    if(err) {
      console.error(err.message)
    }
    console.log("已连接到管理员数据库,路径:" + dbPath) // 打印路径确认定位正确
})

启动项目后查看打印的路径,确认和你用DB Browser编辑的admin.db文件路径完全一致。

  1. 保证表名完全一致
    SQLite的表名默认大小写敏感,你注释的建表语句中表名为Admin,而当前查询语句用的是SELECT * FROM admin,两者不一致会导致查询不到数据。需要确认你在DB Browser中创建的表的实际名称,查询语句和建表时的表名保持完全一致。

  2. 避免混用不同库的API
    你注释的openDB函数用的是sqlite包的异步API,和当前使用的sqlite3包的API不兼容,不要在同一项目中混用两个不同的SQLite操作库,避免出现不可预知的连接问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:57:02