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包不成功,請嘗試重啓電腦試一試(親測)。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章