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

作者:Never_Satisfied日期:9/30/2025

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

1const sqlite3 = require('sqlite3');
2
3async function queryDatabase(dbName, sql, params) {
4    // 创建数据库连接并等待打开
5    const db = await new Promise((resolve, reject) => {
6        const database = new sqlite3.Database(dbName, (err) => {
7            if (err) return reject(err);
8            resolve(database);
9        });
10    });
11
12    try {
13        // 执行参数化查询
14        const results = await new Promise((resolve, reject) => {
15            db.all(sql, params, (err, rows) => {
16                if (err) return reject(err);
17                resolve(rows);
18            });
19        });
20        return results;
21    } finally {
22        // 始终尝试关闭数据库连接
23        await new Promise((resolve, reject) => {
24            db.close((err) => {
25                if (err) {
26                    console.error('数据库关闭错误:', err.message);
27                    reject(err);
28                } else {
29                    resolve();
30                }
31            });
32        }).catch(() => { /* 已记录错误,无需处理 */ });
33    }
34}
35
36// 使用示例
37/*
38queryDatabase('mydb.sqlite', 'SELECT * FROM users WHERE id = ?', [1])
39    .then(results => console.log(results))
40    .catch(err => console.error('操作失败:', err));
41*/
42

功能说明:

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

使用注意事项:

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

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

  • 查询成功时
  • 查询失败时
  • 数据库连接建立失败时
  • 任何代码执行路径出现异常时

在JavaScript / Node.js中,SQLite异步查询函数实现》 是转载文章,点击查看原文


相关推荐


Navicat导入Excel至瀚高数据库
瀚高PG实验室10/1/2025

解决方案:将Excel中没有数据行,执行删除操作。步骤五:将Excel分成若干部分导入,核实为数据库地址信息列字段长度设置小于实际数据长度。步骤三:导入显示成功,且显示行数与Excel行数一致。步骤四:导出数据与Excel进行比对,核实缺失数据。将缺失数据单独导入没有问题。解决客户使用Navicat导入Excel至瀚高数据库数据条数不一致问题。二、导入数据少于Excel数据行及Navicat导入结果显示行。步骤一:导入Excel,配置数据与Excel对应关系。一、导入数据多于Excel数据行。


Python 的内置函数 breakpoint
IMPYLH2025/10/2

Python 内建函数列表 > Python 的内置函数 breakpoint def breakpoint(): ''' 调用位置进入调试器 ''' Python 的内置函数 breakpoint() 是一个用于调试的便捷工具,它会在调用时自动触发调试器,让开发者能够暂停程序执行并检查当前状态。这个函数在 Python 3.7 及更高版本中引入,旨在简化调试过程,特别是在复杂程序中设置断点的场景。 基本用法: def calculate_sum(a, b):


设计模式——单例模式
舒克起飞了2025/10/2

单例模式是一种创建型设计模式,它可以确保一个类在整个程序运行过程中只有一个实例,并提供一个全局访问点以获取该实例。         单例模式的核心思想就是:控制对象的实例化,防止创建多个实例,从而节省资源并保证行为一致性。 关键点: 单例类:包含单例实例的类,通常将构造函数声明为私有;静态成员变量:用于存储单例实例的静态成员变量;获取实例方法:静态方法,用于获取单例实例;私有构造函数:防止外部直接实例化单例类;线程安全处理:确保在多线程环境下单例实例的创建是安全的。构造函数和析构函数是私有


在 Trae 国际版中添加 Chrome Dev MCP Server(Windows 实战指南)
wuhanwhite2025/10/2

前言 最近在折腾 Trae 国际版这类 AI 编程工具的时候,我发现它虽然支持接入 MCP(Model Context Protocol),但是只接受通过 npx 或 uvx 启动的 stdio 模式。 与此同时,Chrome 端的 mcp-chrome 扩展确实很好用,可以让 AI 直接获取浏览器标签页、截图、修改网页样式,甚至做一些自动化操作。但它默认暴露的是 Streamable HTTP 接口,并不符合 Trae 的要求。 这篇文章记录一下我在 Windows 环境下的实践


第一章 机器学习基础理论:机器学习概述(一)
FPGA+护理+人工智能2025/10/3

第一章 机器学习基础理论:机器学习概述 文章目录 第一章 机器学习基础理论:机器学习概述具体的专栏内容请参考: 人工智能专栏一、目标二、重点与难点三、内容1. 机器学习概述2. 机器学习在精神病护理领域的应用 前面python的基础内容算是完成了,接下来将要进入机器学习部分了。 具体的专栏内容请参考: 人工智能专栏 一、目标 通过本章学习,能够: 理解机器学习的基本概念和发展历程 了解机器学习在精神病护理领域的应用现状与前


免费领源码-Spring boot的物流管理系统 |可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
vx_dmxq2112025/10/5

目   录 摘  要 Abstract 1  前言 1.1 设计目的 1.2 设计思路 1.3 国内外研究现状 2  相关技术 2.1  Java语言 2.2 MySQL数据库 2.3 Spring Boot框架 2.4 B/S模式 3  系统分析 3.1  可行性分析 3.2  系统需求分析 3.2.1  功能性分析 3.2.2  非功能性需求分析 3.3  系统用例分析 3.3.1  注


【转载】前验光师如何通过聪明模仿而非蛮干构建月收入3.5万美元的SaaS应用
是魔丸啊2025/10/6

转载 大多数人都认为你需要在科技领域拥有突破性的想法才能成功。 Samuel Rondot的想法与众不同。他的整个行动手册建立在一个简单的规则上:不要重新发明轮子——只要让它变得1%更好。 这种心态帮助他辞去了验光师的工作,从零开始自学编程,并推出了三个现在每月收入3.5万美元的SaaS应用。 以下是他如何做到的。 从验光师到自学程序员 Samuel从未计划成为一名程序员。几年前,他在眼镜行业工作,完全没有编程经验。 什么改变了?他想重建一个自己正在使用的Instagram工具——这一次,完全靠


apache POI 万字总结:满足你对报表一切幻想
大鱼七成饱2025/10/7

背景 国庆期间接了个兼职,处理机构的几张Excel报表。初次沟通,感觉挺简单,接入Easyexcel(FastExcel),然后拼lamda表达式就跑出来了。不过毕竟工作了这些年,感觉没这么简单。后面找业务方详细聊了一次,将需求落到纸面上。逐行研究了下BRD,有点挠头,跑数加各种样式,兼容新老版本,老方案是不行了。综合对比,最终选了老牌的 Apache POI 实现,下面说下为啥选POI,还有POI怎么用,包含样式、公式、动态表头、安全防范、百万级数据导入导出等功能。 一、技术选型 如果实现该


php artisan db:seed执行的时候遇到报错
快支棱起来2025/10/9

INFO Seeding database. Illuminate\Database\QueryException SQLSTATE[42S22]: Column not found: 1054 Unknown column 'email_verified_at' in 'field list' (Connection: mysql, SQL: insert into users (name, email, email_verified_at, password, remember_token,


C++ const 用法全面总结与深度解析
oioihoii2025/10/10

1. const 基础概念 const 关键字用于定义不可修改的常量,是C++中确保数据只读性和程序安全性的核心机制。它可以应用于变量、指针、函数参数、返回值、成员函数等多种场景,深刻影响代码的正确性和性能。 1.1 本质与编译期处理 const变量在编译时会被编译器严格检查,任何修改尝试都会导致编译错误。与C语言不同,C++中的const变量(尤其是全局const)通常不会分配内存,而是直接嵌入到指令中(类似#define),但在以下情况会分配内存: 取const变量地址时 const变量为

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0