nodejs 使用官方oracledb庫連線資料庫 教程
導讀
-
linux下安裝使用
- gcc安裝
- nodejs安裝
- oracle客戶端安裝
- npm安裝oracledb測試連線
- 錯誤說明
-
windows下安裝使用
-
同上結構
-
Linux下安裝使用
一、安裝需要GCC 4.7(或更高版本)
因為編譯node 4(或更高版本)需要C++ 11相容的編譯器。Linux 6和RHEL 6上的預設編譯器不具備所需的C++ 11支援。安裝GCC 4.7或更高版本或升級到Linux 7。(點選檢視官方安裝c++ 11教程)或者參考 CentOS yum升級GCC到4.8 教程。
注:安裝後驗證版本:
gcc --version
二、安裝nodejs
以6.9.4版本為例安裝(根據版本參考即可)
cd /opt tar -Jxf node-v6.9.4-linux-x64.tar.xz
設定Node.js 環境變數:
export PATH=/opt/node-v6.9.4-linux-x64/bin:$PATH
檢視node版本
node -v //保證npm版本最新 npm i -g npm to update
三、安裝oracle客戶端 'Basic' 和 'SDK' zip包
1. 進入 官方下載地址,下載以下兩個包,並安裝在同一個目錄(官方下載各種驗證,這裡提供百度雲盤下載連結)
以本機測試為例,我的安裝位置(可自定義)為 /opt/oracle
cd /opt/oracle unzip instantclient-basic-linux.x64-12.2.0.1.0.zip unzip instantclient-sdk-linux.x64-12.2.0.1.0.zip mv instantclient_12_2 instantclient cd instantclient ln -s libclntsh.so.12.1 libclntsh.so
設定環境變數
//把以下環境變數新增至當前環境變數檔案下 export LD_LIBRARY_PATH=/opt/oracle/instantclient:$LD_LIBRARY_PATH export OCI_LIB_DIR=/opt/oracle/instantclient export OCI_INC_DIR=/opt/oracle/instantclient/sdk/include
四、安裝oracledb 測試
安裝oracle庫:
npm install oracledb 輸出:
> [email protected] install /opt/oracletest/node_modules/oracledb > node-gyp rebuild
make: Entering directory `/opt/oracletest/node_modules/oracledb/build' CXX(target) Release/obj.target/oracledb/src/njs/src/njsOracle.o CXX(target) Release/obj.target/oracledb/src/njs/src/njsPool.o CXX(target) Release/obj.target/oracledb/src/njs/src/njsConnection.o CXX(target) Release/obj.target/oracledb/src/njs/src/njsResultSet.o CXX(target) Release/obj.target/oracledb/src/njs/src/njsMessages.o CXX(target) Release/obj.target/oracledb/src/njs/src/njsIntLob.o CXX(target) Release/obj.target/oracledb/src/dpi/src/dpiEnv.o CXX(target) Release/obj.target/oracledb/src/dpi/src/dpiEnvImpl.o CXX(target) Release/obj.target/oracledb/src/dpi/src/dpiException.o CXX(target) Release/obj.target/oracledb/src/dpi/src/dpiExceptionImpl.o CXX(target) Release/obj.target/oracledb/src/dpi/src/dpiConnImpl.o CXX(target) Release/obj.target/oracledb/src/dpi/src/dpiDateTimeArrayImpl.o CXX(target) Release/obj.target/oracledb/src/dpi/src/dpiPoolImpl.o CXX(target) Release/obj.target/oracledb/src/dpi/src/dpiStmtImpl.o CXX(target) Release/obj.target/oracledb/src/dpi/src/dpiUtils.o CXX(target) Release/obj.target/oracledb/src/dpi/src/dpiLob.o CXX(target) Release/obj.target/oracledb/src/dpi/src/dpiCommon.o SOLINK_MODULE(target) Release/obj.target/oracledb.node COPY Release/oracledb.node make: Leaving directory `/opt/oracletest/node_modules/oracledb/build' npm WARN saveError ENOENT: no such file or directory, open '/opt/oracletest/package.json' npm notice created a lockfile as package-lock.json. You should commit this file. npm WARN enoent ENOENT: no such file or directory, open '/opt/oracletest/package.json' npm WARN oracletest No description npm WARN oracletest No repository field. npm WARN oracletest No README data npm WARN oracletest No license field.
+ [email protected] added 2 packages in 42.994s
在當前目錄新建app.js測試連線:
var oracledb = require('oracledb'); var config = { user:'******', //使用者名稱 password:'******', //密碼 //IP:資料庫IP地址,PORT:資料庫埠,SCHEMA:資料庫名稱 connectString : "IP:PORT/SCHEMA" }; oracledb.getConnection( config, function(err, connection) { if (err) { console.error(err.message); return; } //查詢某表十條資料測試,注意替換你的表名 connection.execute("SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM 你的表名) A WHERE ROWNUM <= 10 ) WHERE RN >= 0", function(err, result) { if (err) { console.error(err.message); doRelease(connection); return; } //列印返回的表結構 console.log(result.metaData); //列印返回的行資料 console.log(result.rows); }); }); function doRelease(connection) { connection.close( function(err) { if (err) { console.error(err.message); } }); }
執行:
node app.js
執行後報錯:
ORA-24454: client host name is not set
這裡需要設定主機名到 /etc/hosts
$ sudo /bin/bash -c "echo '127.0.1.1 ${HOSTNAME}' >> /etc/hosts"
設定後重新執行 node app.js 返回列印結果成功。
如果pm2管理專案時報錯:Error: NJS-045: cannot load the oracledb add-on binary for Node.js **** (linux, x64)
請記得pm2 restart *** --update-env 來更新環境變數
參考 https://github.com/oracle/node-oracledb/blob/master/INSTALL.md#instzip
Windows下安裝使用
一、安裝c++ 編譯環境
這裡是下載的 Visual Studio Express 2013 for Windows Desktop
1.官方下載
(由於下載過於麻煩,可以通過這裡提供的 百度雲盤下載 安裝檔案 cn_visual_studio_express_2012_for_windows_desktop_x86_web_installer_1001992.exe)
找到Visual Studio Express 2012 for Windows Desktop 並點選右上角 下載 按鈕 開始下載
下載完安裝檔案 cn_visual_studio_express_2012_for_windows_desktop_x86_web_installer_1001992.exe 並點選安裝
二、安裝 Oracle instant client
這是 Oracle 提供的訪問資料庫的 C++介面, windows 64位在這裡下載 Version 12.1.0.1.0 中的
instantclient-basic-windows.x64-12.1.0.1.0.zip
和
instantclient-sdk-windows.x64-12.1.0.1.0.zip;
1.官方下載地址(由於官方下載許可權和網路問題,這裡同樣提供 百度雲下載 地址。)
下載完成後把它們解壓到 D:\db\oracle\instantclient_12_2 資料夾中(可自定義目錄), 由於兩個 zip 中的檔案各不相同, 所以合併到同一個資料夾也不會發生覆蓋.
Windows環境變數設定
系統環境變數新增以下3個:
OCI_LIB_DIR=D:\db\oracle\instantclient_12_2\sdk\lib\msvc
OCI_INC_DIR=D:\db\oracle\instantclient_12_2\sdk\include
OCI_VERSION=12
path環境變數 里加上 以下兩個,注意先後順序
三、安裝nodejs(省略,nodejs.org 下載msi安裝包安裝)
這裡需要注意 npm版本保證最新即可
下面是npm升級命令:
npm i -g npm
四、安裝oracledb 測試
npm install oracledb
程式碼測試如同linux下方式,請參考上面linux安裝 第四章內容。
如果安裝oracledb包不成功,請嘗試重啟電腦試一試(親測)。