如何使用Node.js动态创建SQLite数据库并自动检测是否存在?
问题根因
- 直接执行
sqlite3 test.db会启动SQLite交互式命令行,进程不会主动退出,exec的回调函数需要等待子进程结束才会触发,因此你的代码会一直卡住无法继续执行 - SQLite默认仅在执行至少一次写入操作后才会在磁盘生成对应的数据库文件,仅启动交互shell不会触发文件创建逻辑
解决方案
方案1:调整现有exec调用(依赖系统已安装sqlite3命令行工具)
给sqlite3命令传入待执行的语句,执行完成后进程会自动退出,即可触发数据库文件创建:
const { exec } = require("child_process"); // 传入空执行语句,命令跑完自动退出,触发数据库文件生成 exec(`sqlite3 test.db ""`, (err, stdout, stderr)=>{ if(err){ console.log(err); return; } console.log('test.db 已创建/已存在') })
如果需要同时初始化表结构,直接在命令中传入SQL语句即可:
exec(`sqlite3 test.db "CREATE TABLE IF NOT EXISTS demo (id INTEGER PRIMARY KEY);"`, (err, stdout, stderr)=>{ // 回调逻辑 })
方案2:使用Node.js专用SQLite库(更稳定,无系统依赖)
更推荐使用专门的SQLite操作包,不需要依赖系统预装sqlite3命令行工具,实例化时会自动处理数据库不存在就创建的逻辑,以better-sqlite3为例:
- 安装依赖:
npm install better-sqlite3 - 代码实现:
const Database = require('better-sqlite3'); // 实例化时如果test.db不存在会自动创建,存在则直接打开 const db = new Database('test.db'); // 可在此处执行表结构初始化等操作 db.exec(`CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE NOT NULL )`); // 操作完成关闭数据库连接 db.close(); console.log('数据库初始化完成');
内容的提问来源于stack exchange,提问作者Ayush
相关产品推荐
相关产品推荐

