在JavaScript / Node.js中,SQLite异步查询函数实现
以下是基于Node.js和SQLite的异步函数实现,满足参数化查询、异常安全关闭数据库连接等要求:
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));
*/
功能说明:
- 参数化查询:通过
db.all()
方法和参数数组实现安全查询 - 异步处理:使用Promise和async/await实现异步操作
- 连接管理:
- 使用IIFE模式确保数据库正确打开
- finally块保证始终尝试关闭连接
- 关闭错误会被记录但不影响主要结果
- 错误处理:
- 捕获所有数据库操作错误
- 查询错误会直接传递给调用方
- 关闭错误会记录到控制台
使用注意事项:
- 需要先安装依赖:
npm install sqlite3
- 数据库文件需要存在于指定路径
- SQL语句需要与参数数组正确匹配
- 返回结果为行数组,空查询返回空数组
这个实现确保了在以下情况都能正确关闭连接:
- 查询成功时
- 查询失败时
- 数据库连接建立失败时
- 任何代码执行路径出现异常时