1. 程式人生 > >nodejs操作oracle資料庫簡單封裝-node-oracledb模組

nodejs操作oracle資料庫簡單封裝-node-oracledb模組

一 安裝模組

npm install oracledb

官方文件:https://www.npmjs.com/package/oracledb

安裝免費的Oracle Instant Client ZIP

如果資料庫位於遠端計算機上,請執行以下步驟。其他條件請見https://oracle.github.io/node-oracledb/INSTALL.html#quickstart

1.從Oracle Technology Network下載免費的64位Instant Client Basic ZIP檔案 。(32位Instant Client在 

這裡)。

  • 提取 instantclient-basic-windows.x64-18.3.0.0.0dbru.zip

  • 將其目錄新增到PATH。例如,在Windows 7上,PATH在控制面板中更新 - >系統 - >高階系統設定 - >高階 - >環境變數 - >系統變數 - > PATH並新增您的路徑,例如C:\oracle\instantclient_18_3

    如果安裝了多個版本的Oracle庫,請確保在PATH執行Node.js之前首先出現所需的版本。

    或者,將解壓縮的Instant Client檔案移動到這裡, node_modules\oracledb\build\Release

    以便DLL和其他檔案與oracledb.node二進位制檔案位於同一目錄中。如果這樣做,則PATH不需要設定。

2.(可選)建立預設的Oracle Client配置目錄

如果您打算同定位可選的Oracle配置檔案,如 tnsnames.orasqlnet.oraldap.ora,或 oraaccess.xml與即時客戶端,可以將它們放在一個 C:\oracle\instantclient_18_3\network\admin子目錄中。如果需要,建立它。

這是使用此Instant Client的應用程式的預設Oracle配置目錄。

或者,配置檔案可以放在另一個目錄中。然後將環境變數TNS_ADMIN

設定為該目錄名稱。

3.安裝Visual Studio Redistributables

PATH變數需要包括相應的VS再分發:

還可以找到查詢庫OCI.DLL並執行所需的版本 :

dumpbin /dependents oci.dll

如果看到,MSVCR120.dll則需要VS 2013 Redistributable。如果看到,MSVCR100.dll則需要VS 2010 Redistributable。如果你看到MSVCR80.dll那麼你需要VS 2005 Redistributable。

三 封裝連線資料庫程式碼

var oracledb = require('oracledb');

var query = function(sql,callback){
    oracledb.getConnection(
        {
            user          : "xxx",
            password      : "xxx",
            connectString : "x.x.x.x:11000/xxx"
        },
        function (err, connection)
        {
            if (err)
            {
                console.error(err.message);
                return;
            }/*else{
                console.log("連線成功");
            }*/
            connection.execute(sql, [], function (err, result)
            {
                if (err)
                {
                    console.error(err.message);
                    doRelease(connection);
                    return;
                }
                //console.log(result.metaData);
                callback(result.rows.map((v)=>
                    {
                        return result.metaData.reduce((p, key, i)=>
                        {
                            p[key.name] = v[i];
                            return p;
                        }, {})
                    }));
                doRelease(connection);
            });
        }
    );
}

function doRelease(connection) {
    connection.close(
        function(err) {
            if (err)
                console.error(err.message);
        });
}

exports.query = query;

四 測試

var db = require('./db');
db.query("SELECT count(*) count FROM X",function(result){
    console.log("查詢數量:"+result[0].count)
})