跳到主要内容

node 连接Oracle数据库

最近给公司做了一个采购用的采销辅助系统,公司的数据库是 Oracle,而 node 一般连接的是 MySQL 或者 MangoDB,所以我查了一下 Node 连接 Oracle 的方法。

一 搭建 Oracle 环境,即安装 Oracle 客户端

&emso;这里以 Windows 为例,Linux 具体请自行搜索。

1. 下载 instantclient

下载地址:https://www.oracle.com/cn/database/technology/instant-client.html
注意下载的时候需要登录 Oracle 账号,可以注册一个;一般选择 basic 包。

2. 解压 instantclient,创建 TNS 文件

  • 将 instantclient 解压至自己想要的文件夹,如:C:\instantclient_10_2
  • 创建文件 C:\instantclient_10_2\NETWORK\ADMIN\tnsnames.ora
  • 根据实际情况编辑 tnsnames.ora
  CONNETCTNAME =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = XXX.XXX.XXX.XXX)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = pdborcl)
)
)

3. 设置环境变量

  • 将 C:\instantclient_10_2 添加到 Path 变量
  • 添加 NLS_LANG=AMERICAN_AMERICA.ZHS16GBK,目的是防止乱码,根据实际情况而定
  • 添加 TNS_ADMIN = C:\instantclient_10_2\NETWORK\ADMIN 变量

二 连接数据库

1. yarn add oracledb

2. 示例

// 摘自 https://www.cnblogs.com/rysinal/p/7779055.html
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)
}
})
}

三 资料查找

1. Oracle 官方 GitHub

https://github.com/oracle/node-oracledb

Oracle 官方文档

https://oracle.github.io/node-oracledb/doc/api.html