摘要:在本教程中,您将学习如何从 Node.js 应用程序调用 MySQL 中的存储过程。
- 连接到 MySQL 数据库服务器。
- 通过执行
CALL spName
语句来调用存储过程。spName
是存储过程的名称。 - 关闭数据库连接。
调用MySQL存储过程示例
为了进行演示,我们创建一个新的存储过程filterTodo
来根据completed
字段的值查询todos
表中的行。
DELIMITER $$
CREATE PROCEDURE `filterTodo`(IN done BOOLEAN)
BEGIN
SELECT * FROM todos WHERE completed = done;
END$$
DELIMITER ;
Code language: SQL (Structured Query Language) (sql)
存储过程filterTodo
根据done
参数返回todos
表中的行。如果done参数为true,则返回所有已完成的待办事项,否则,返回未完成的待办事项。
如您所知,要调用 MySQL 中的存储过程,可以使用CALL
语句。例如,要调用filterTodo
存储过程,请执行以下语句:
CALL filterTodo(true);
Code language: SQL (Structured Query Language) (sql)
该语句返回以下结果集:
+----+--------------------------+-----------+
| id | title | completed |
+----+--------------------------+-----------+
| 4 | It should work perfectly | 1 |
+----+--------------------------+-----------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
Code language: JavaScript (javascript)
以下storedproc.js程序调用filterTodo
存储过程并返回结果集:
let mysql = require('mysql');
let config = require('./config.js');
let connection = mysql.createConnection(config);
let sql = `CALL filterTodo(?)`;
connection.query(sql, true, (error, results, fields) => {
if (error) {
return console.error(error.message);
}
console.log(results[0]);
});
connection.end();
Code language: JavaScript (javascript)
请注意,该程序使用存储数据库信息的config.js
模块:
let config = {
host : 'localhost',
user : 'root',
password: '',
database: 'todoapp'
};
module.exports = config;
Code language: JavaScript (javascript)
在CALL
语句中,我们使用占位符 (?) 将数据传递给存储过程。
当我们在connection
对象上调用query()
方法时,我们将done
参数的值作为query()
方法的第二个参数传递。
让我们运行storedproc.js 程序。
> node storedproc.js
[ RowDataPacket { id: 4, title: 'It should work perfectly', completed: 1 } ]
Code language: JavaScript (javascript)
程序按预期显示 1 行。
在本教程中,您学习了如何从 Node.js 程序调用 MySQL 中的存储过程。
本教程有帮助吗?