1.开始

Node.js:https://nodejs.org

OracleDB: https://github.com/oracle/node-oracledb/blob/master/INSTALL.md#instwin

      https://github.com/oracle/node-oracledb/blob/master/doc/api.md#resultsethandling

2.OracleDB安装

  下载安装即可,略

  • C Compiler with support for C++ 11 (Xcode, gcc, Visual Studio or similar)

  打开Visual Studio的安装文件,查看C编译器是否安装,见下图

  • The small, free Oracle Instant Client "basic" and "SDK" packages if your database is remote. Or use a locally installed database such as the free Oracle XE release

  打开Oracle Instant Client,免费下载basic和sdk两个压缩包,绿色软件无须安装

  instantclient-basic-windows.x64-12.1.0.2.0.zip  69MB

  instantclient-sdk-windows.x64-12.1.0.2.0.zip   2.62MB

  将两个ZIP文件解压到同一个目录中Z:\Softs\OracleClient\12GX64

  • Set OCI_LIB_DIR and OCI_INC_DIR during installation if the Oracle libraries and headers are in a non-default location

  打开我的电脑->属性->高级属性->环境变量,新增两个环境变量ORACLE_HOME64,OCI_LIB_DIR 和 OCI_INV_DIR

  ORACLE_HOME64 : Z:\Softs\OracleClient\12GX64

  OCI_LIB_DIR : %ORACLE_HOME64%\sdk\lib\msvc

  OCI_INV_DIR : %ORACLE_HOME64%\sdk\include

  将Z:\Softs\OracleClient\12GX64这个路径%ORACLE_HOME64%加到Path中。

  • 执行CMD命令
1
$ npm install oracledb

3.OracleDB普通查询

dbconfig.js 配置数据库连接字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
module.exports = {
  user          : process.env.NODE_ORACLEDB_USER || "test",
 
  // Instead of hard coding the password, consider prompting for it,
  // passing it in an environment variable via process.env, or using
  // External Authentication.
  password      : process.env.NODE_ORACLEDB_PASSWORD || "test",
 
  // For information on connection strings see:
  // https://github.com/oracle/node-oracledb/blob/master/doc/api.md#connectionstrings
  connectString : process.env.NODE_ORACLEDB_CONNECTIONSTRING || "192.168.1.100/orcl",
 
  // Setting externalAuth is optional.  It defaults to false.  See:
  // https://github.com/oracle/node-oracledb/blob/master/doc/api.md#extauth
  externalAuth  : process.env.NODE_ORACLEDB_EXTERNALAUTH ? true false
};

app.js执行一个简单的查询语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
var oracledb = require('oracledb');
var dbConfig = require('./dbconfig.js');
 
//打开一个链接
oracledb.getConnection(
  {
    user          : dbConfig.user,
    password      : dbConfig.password,
    connectString : dbConfig.connectString
  },
  function(err, connection)
  {
    if (err) {
      console.error(err.message);
      return;
    }
    //执行查询语句
    connection.execute(
      "SELECT department_id, department_name " +
        "FROM departments " +
        "WHERE manager_id < :id",
      [110],  // bind value for :id
      { maxRows: 10 },  // a maximum of 10 rows will be returned.  Default limit is 100
      function(err, result)
      {
        if (err) {
          console.error(err.message);
          doRelease(connection);
          return;
        }
        console.log(result.metaData);
        console.log(result.rows);
        //查询结束后记得释放链接资源
        doRelease(connection);
      });
  });
 
function doRelease(connection)
{
  connection.release(
    function(err) {
      if (err) {
        console.error(err.message);
      }
    });
}

  

4.OracleDB ResultSet查询

   普通查询,默认最大返回100条数据,如果需要查询更多的数据那么需要建立一个DataReader和数据库保持连接然后一行一行的读取数据,这个在nodejs oracledb里面就叫ResultSet查询。

你可以这样使用ResultSet,每次返回一行数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
connection.execute(
  "SELECT employee_id, last_name FROM employees ORDER BY employee_id",
  [], // no bind variables
  { resultSet: true }, // return a result set.  Default is false
  function(err, result)
  {
    if (err) { . . . }
    fetchOneRowFromRS(connection, result.resultSet);
  });
});
 
. . .
 
function fetchOneRowFromRS(connection, resultSet)
{
  resultSet.getRow( // get one row
    function (err, row)
    {
      if (err) {
         . . .           // close the result set and release the connection
      else if (!row) { // no rows, or no more rows
        . . .            // close the result set and release the connection
      else {
        console.log(row);
        fetchOneRowFromRS(connection, resultSet);  // get next row
      }
    });
}

当然也可以每次返回多行数据,请使用numRows参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
var numRows = 10;  // number of rows to return from each call to getRows()
 
connection.execute(
  "SELECT employee_id, last_name FROM employees ORDER BY employee_id",
  [], // no bind variables
  { resultSet: true }, // return a result set.  Default is false
  function(err, result)
  {
    if (err) { . . . }
    fetchRowsFromRS(connection, result.resultSet, numRows);
  });
});
 
. . .
 
function fetchRowsFromRS(connection, resultSet, numRows)
{
  resultSet.getRows( // get numRows rows
    numRows,
    function (err, rows)
    {
      if (err) {
         . . .                        // close the result set and release the connection
      else if (rows.length == 0) {  // no rows, or no more rows
        . . .                         // close the result set and release the connection
      else if (rows.length > 0) {
        console.log(rows);
        fetchRowsFromRS(connection, resultSet, numRows);  // get next set of rows
      }
    });
}

http://www.cnblogs.com/mengkzhaoyun/p/5405912.html

crossplatform---Nodejs in Visual Studio Code 07.学习Oracle的更多相关文章

  1. Nodejs in Visual Studio Code 07.学习Oracle

    1.开始 Node.js:https://nodejs.org OracleDB: https://github.com/oracle/node-oracledb/blob/master/INSTAL ...

  2. Nodejs in Visual Studio Code 02.学习Nodejs

    1.开始 源码下载:https://github.com/sayar/NodeMVA 在线视频:https://mva.microsoft.com/en-US/training-courses/usi ...

  3. Nodejs in Visual Studio Code 03.学习Express

    1.开始 下载源码:https://github.com/sayar/NodeMVA Express组件:npm install express -g(全局安装) 2.ExpressRest 打开目录 ...

  4. Nodejs in Visual Studio Code 14.IISNode与IIS7.x

    1.开始 部署IISNode环境请参考:Nodejs in Visual Studio Code 08.IIS 部署Nodejs程序请参考:Nodejs in Visual Studio Code 1 ...

  5. Nodejs in Visual Studio Code 11.前端工程优化

    1.开始 随着互联网技术的发展,企业应用里到处都是B/S设计,我有幸经历了很多项目有Asp.Net的,有Html/js的,有Silverlight的,有Flex的.很遗憾这些项目很少关注前端优化的问题 ...

  6. Nodejs in Visual Studio Code 10.IISNode

    1.开始 Nodejs in Visual Studio Code 08.IIS : http://www.cnblogs.com/mengkzhaoyun/p/5410185.html 参考此篇内容 ...

  7. Nodejs in Visual Studio Code 04.Swig模版

    1.开始 设置Node_Global:npm config set prefix "C:\Program Files\nodejs" Express组件:npm install e ...

  8. Nodejs in Visual Studio Code 01.简单介绍Nodejs

    1.开始 作者自己:开发人员,Asp.Net , html / js , restful , memcached , oracle ,windows , iis 目标读者:供自己以后回顾 2.我看No ...

  9. crossplatform---Nodejs in Visual Studio Code 02.学习Nodejs

    1.开始 源码下载:https://github.com/sayar/NodeMVA 在线视频:https://mva.microsoft.com/en-US/training-courses/usi ...

随机推荐

  1. iframe跨域访问

    js跨域是个讨论很多的话题.iframe跨域访问也被研究的很透了. 一般分两种情况: 一. 是同主域下面,不同子域之间的跨域: 同主域,不同子域跨域,设置相同的document.domian就可以解决 ...

  2. windows 10环境下 使用 msys2 + vs code 配置 c++ 的编译环境

    不太多描述 msys2 与  vs code  ,既然你需要安装 一种语言的编译环境了 ,你肯定对这两个不陌生: 1. 先安装msys2; (下载多少位的msys2就安装多少位的 mingw,本人安装 ...

  3. NC WebService接口开发流程

    一.定义类: 接口类 包定义在public下,接口类名为I开头,Service结尾 实现类 包定义在private下,实现类名以ServiceImpl结尾 VO类 若有VO类,也放在public下 U ...

  4. document.referrer 特性

    最近需要用到document.referrer,但是在测试的时候,总是获取为空,百思不得其解. 于是发动百度,看了大量的文章没有一个说到点子上是为什么,后来偶然看到document.referrer ...

  5. PHP开发环境配置

    wamp:windows apache MySQL php 下载php版本问题在windows 下apache+php用vc6 thread safe版本 1.首先安装apache到e盘myenv/a ...

  6. Java如何将html转以后的字符转化成正常显示的字符

    String str = "“!@#¥%……&——+”";//“!@#¥%……&——+”  中文状态下的标点符号,进过html转换了 String convStr ...

  7. poj3050

    #include <stdio.h> #include <set> #include <string> using namespace std; int a[6]; ...

  8. 20145225《Java程序设计》 第4周学习总结

    20145225<Java程序设计> 第4周学习总结 教材学习内容总结 第六章 继承与多态 6.1继承 继承共同行为:存在着重复,可把相同的程序代码提升(pull up)为父类.exten ...

  9. 实现关闭窗口IE不提示兼容火狐

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  10. Echarts动态加载后台数据

    注意:1.用Ajax请求获取后台数据 2.Echarts只能处理Json数据 后台Controller:根据业务需求不同而返回不同数据,我前台要循环遍历Echarts的series进行数据添加,所以后 ...