在本教程中,您将学习如何从Node.js应用程序中调用MySQL中的存储过程。
调用存储过程的步骤与执行查询的步骤类似,如下所示:
- 连接到MySQL数据库服务器,请参考:http://www.yiibai.com/mysql/nodejs-connect.html
- 通过执行
CALL spName
语句来调用存储过程。spName
是存储过程的名称。 - 关闭数据库连接。
调用MySQL存储过程示例
为了演示,我们创建一个新的存储过程filterTodo
,以根据completed
字段的值来查询todos
表中的行。
use todoapp;
DELIMITER $$
CREATE PROCEDURE `filterTodo`(IN done BOOLEAN)
BEGIN
SELECT * FROM todos WHERE completed = done;
END$$
DELIMITER ;
存储过程filterTodo
根据done
参数返回todos
表中的行。 如果done
参数为true
,则返回所有已完成的todos
,否则返回未完成的todos
。
在MySQL中调用一个存储过程,可以使用CALL
语句。 例如,要调用filterTodo
存储过程,请执行以下语句:
CALL filterTodo(true);
该语句返回以下结果集:
mysql> CALL filterTodo(true);
+----+-----------------------------------------------+-----------+
| id | title | completed |
+----+-----------------------------------------------+-----------+
| 4 | It should work perfectly | 1 |
| 6 | 现在学习一次插入多行记录(by www.yiibai.com) | 1 |
| 7 | It should work perfectly | 1 |
+----+-----------------------------------------------+-----------+
3 rows in set
Query OK, 0 rows affected
以下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();
请注意,该程序使用存储数据库信息的config.js
模块:
let config = {
host : 'localhost',
user : 'root',
password: '123456',
database: 'todoapp'
};
module.exports = config;
在CALL
语句中,我们使用占位符(?
)将数据传递给存储过程。
当我们在连接对象上调用query()
方法时,我们将done
参数的值作为query()
方法的第二个参数传递。
下面,我们来运行storedproc.js程序,如下所示 -
F:\worksp\mysql\nodejs\nodejs-connect>node storedproc.js
openssl config failed: error:02001003:system library:fopen:No such process
[ RowDataPacket { id: 4, title: 'It should work perfectly', completed: 1 },
RowDataPacket { id: 6, title: '现在学习一次插入多行记录(by www.yiibai.com)', completed: 1 },
RowDataPacket { id: 7, title: 'It should work perfectly', completed: 1 } ]
程序按预期显示3
行。
在本教程中,您已经学习了如何从Node.js
程序中调用MySQL中的存储过程。