Linux 下 nodejs 使用官方oracledb库连接数据库 教程

时间:2017-11-03 17:11:09   收藏:0   阅读:2096

一、安装需要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

三、安装oracle客户端 ‘Basic‘ 和 ‘SDK‘  zip包

进入 下载地址,下载以下两个包,并安装在同一个目录

技术分享

 

以本机测试为例,我的安装位置(可自定义)为 /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

输出:

> oracledb@1.13.1 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.

+ oracledb@1.13.1
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 返回打印结果成功。

 

参考 https://github.com/oracle/node-oracledb/blob/master/INSTALL.md#instzip

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!