• 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

    输出:

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

    如果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:dboracleinstantclient_12_2 文件夹中(可自定义目录), 由于两个 zip 中的文件各不相同, 所以合并到同一个文件夹也不会发生覆盖.

     Windows环境变量设置

    系统环境变量新增以下3个:

    OCI_LIB_DIR=D:dboracleinstantclient_12_2sdklibmsvc
    OCI_INC_DIR=D:dboracleinstantclient_12_2sdkinclude
    OCI_VERSION=12

    path环境变量 里加上 以下两个,注意先后顺序

    三、安装nodejs(省略,nodejs.org 下载msi安装包安装)

    这里需要注意 npm版本保证最新即可

    下面是npm升级命令:

    npm i -g npm

    四、安装oracledb 测试

    npm install oracledb

    代码测试如同linux下方式,请参考上面linux安装 第四章内容。

    如果安装oracledb包不成功,请尝试重启电脑试一试(亲测)。 

  • 相关阅读:
    自己觉得好的文章(2)
    为什么要用C运行时库的_beginthreadex代替操作系统的CreateThread来创建线程?
    GraphEdit
    吴裕雄天生自然Spring BootSpring Boot与Thymeleaf实现页面信息国际化
    吴裕雄天生自然Spring BootThymeleaf基础语法
    吴裕雄天生自然Spring BootSpring Boot处理JSON数据
    吴裕雄天生自然Spring Boot基于Thymeleaf与BootStrap的Web开发实例
    吴裕雄天生自然Spring Boot基本配置和注解
    吴裕雄天生自然Spring Boot自定义Starters
    吴裕雄天生自然Spring Boot的基本配置
  • 原文地址:https://www.cnblogs.com/rysinal/p/7779055.html
Copyright © 2020-2023  润新知