在JavaScript / Node.js中,SQLite异步查询函数实现

以下是基于Node.js和SQLite的异步函数实现,满足参数化查询、异常安全关闭数据库连接等要求:

javascript 复制代码
const sqlite3 = require('sqlite3');

async function queryDatabase(dbName, sql, params) {
    // 创建数据库连接并等待打开
    const db = await new Promise((resolve, reject) => {
        const database = new sqlite3.Database(dbName, (err) => {
            if (err) return reject(err);
            resolve(database);
        });
    });

    try {
        // 执行参数化查询
        const results = await new Promise((resolve, reject) => {
            db.all(sql, params, (err, rows) => {
                if (err) return reject(err);
                resolve(rows);
            });
        });
        return results;
    } finally {
        // 始终尝试关闭数据库连接
        await new Promise((resolve, reject) => {
            db.close((err) => {
                if (err) {
                    console.error('数据库关闭错误:', err.message);
                    reject(err);
                } else {
                    resolve();
                }
            });
        }).catch(() => { /* 已记录错误,无需处理 */ });
    }
}

// 使用示例
/*
queryDatabase('mydb.sqlite', 'SELECT * FROM users WHERE id = ?', [1])
    .then(results => console.log(results))
    .catch(err => console.error('操作失败:', err));
*/

功能说明:

  1. 参数化查询 :通过db.all()方法和参数数组实现安全查询
  2. 异步处理:使用Promise和async/await实现异步操作
  3. 连接管理
    • 使用IIFE模式确保数据库正确打开
    • finally块保证始终尝试关闭连接
    • 关闭错误会被记录但不影响主要结果
  4. 错误处理
    • 捕获所有数据库操作错误
    • 查询错误会直接传递给调用方
    • 关闭错误会记录到控制台

使用注意事项:

  1. 需要先安装依赖:npm install sqlite3
  2. 数据库文件需要存在于指定路径
  3. SQL语句需要与参数数组正确匹配
  4. 返回结果为行数组,空查询返回空数组

这个实现确保了在以下情况都能正确关闭连接:

  • 查询成功时
  • 查询失败时
  • 数据库连接建立失败时
  • 任何代码执行路径出现异常时
相关推荐
你好~每一天15 小时前
未来3年,最值得拿下的5个AI证书!
数据结构·人工智能·算法·sqlite·hbase·散列表·模拟退火算法
老前端的功夫15 小时前
前端技术选型的理性之道:构建可量化的ROI评估模型
前端·javascript·人工智能·ubuntu·前端框架
狮子座的男孩16 小时前
js函数高级:04、详解执行上下文与执行上下文栈(变量提升与函数提升、执行上下文、执行上下文栈)及相关面试题
前端·javascript·经验分享·变量提升与函数提升·执行上下文·执行上下文栈·相关面试题
爱学习的程序媛16 小时前
《JavaScript权威指南》核心知识点梳理
开发语言·前端·javascript·ecmascript
乐观主义现代人16 小时前
go 面试
java·前端·javascript
2501_9418868617 小时前
多语言微服务架构下的微服务熔断与限流优化实践
javascript
tsumikistep17 小时前
【前后端】Vue 脚手架与前端工程结构入门指南
前端·javascript·vue.js
A***F15718 小时前
从零到上线:Node.js 项目的完整部署流程(包含 Docker 和 CICD)
docker·容器·node.js
慧慧吖@18 小时前
关于在本地去模拟生产环境检测页面内容注意事项
前端·javascript·vue.js
黄团团18 小时前
Vue2整合Electron开发桌面级应用以及打包发布(提供Gitee源码)
前端·javascript·vue.js·elementui·electron