Express使用SQLite无法连接磁盘数据库 仅连接内存数据库问题求助
问题核心原因
你遇到的现象本质是实际连接的SQLite文件不是你用DB Browser创建的admin.db,sqlite3库在目标路径不存在对应文件时会自动创建空白数据库,不会抛出异常,所以你会看到连接成功但查不到已有数据,看起来像是连接了内存数据库。
修复步骤
- 修正数据库路径写法
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文件路径完全一致。
保证表名完全一致
SQLite的表名默认大小写敏感,你注释的建表语句中表名为Admin,而当前查询语句用的是SELECT * FROM admin,两者不一致会导致查询不到数据。需要确认你在DB Browser中创建的表的实际名称,查询语句和建表时的表名保持完全一致。避免混用不同库的API
你注释的openDB函数用的是sqlite包的异步API,和当前使用的sqlite3包的API不兼容,不要在同一项目中混用两个不同的SQLite操作库,避免出现不可预知的连接问题。
内容的提问来源于stack exchange,提问作者Habib Ali
相关产品推荐
相关产品推荐

