nodejs操作oracle資料庫簡單封裝-node-oracledb模組
一 安裝模組
npm install 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
oracledb.node
二進位制檔案位於同一目錄中。如果這樣做,則PATH
不需要設定。
2.(可選)建立預設的Oracle Client配置目錄
如果您打算同定位可選的Oracle配置檔案,如 tnsnames.ora
,sqlnet.ora
,ldap.ora
,或 oraaccess.xml
與即時客戶端,可以將它們放在一個 C:\oracle\instantclient_18_3\network\admin
子目錄中。如果需要,建立它。
這是使用此Instant Client的應用程式的預設Oracle配置目錄。
或者,配置檔案可以放在另一個目錄中。然後將環境變數TNS_ADMIN
3.安裝Visual Studio Redistributables
該PATH
變數需要包括相應的VS再分發:
- Oracle客戶端18和12.2需要Visual Studio 2013 Redistributable。
- Oracle客戶端12.1需要Visual Studio 2010 Redistributable。
- Oracle客戶端11.2需要Visual Studio 2005 Redistributable。
還可以找到查詢庫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)
})