oracledb

介绍

oracledb是nodejs中一个可以连接和操作oracle数据库的模块

环境准备

node环境以及npm环境

这是一个nodejs的模块,所以你需要有一个node以及npm的环境才可以运行程序,推荐使用比较新的node版本( > 8.0.0)
nodejs下载地址:点这里
nodejs安装教程:点这里

oracle环境

需要操作的是oracle数据库,所以你需要一个oracle数据库的本地环境
oracle下载地址:点这里
oracle安装教程:oracle的安装教程网上很多,版本不同,安装过程也不一样,大家按自己所需去查相关教程

python环境

要使用oracledb模块,除了上面的环境,你还需要一个python环境
python下载地址:添加链接描述
python安装教程:添加链接描述

oracledb的使用

oracledb基础

项目安装oracledb模块

npm install oracledb

引入oracledb模块

const Oracledb = require('oracledb)

oracledb模块基础讲解

这里仅讲解基础的使用,有兴趣的童鞋可以自行去了解一下oracledb的详细用法
连接oracle数据库

//config是连接配置
const config = {
	user: "数据库用户名",
	password: "数据库密码",
	connectString: "数据库ip地址"
}
oracledb.getConnection(config, function(err, conn){
	//err是错误
	//conn是连接成功返回的连接对象
})

执行sql语句

oracledb.getConnection(config, function(err, conn){
	//在连接数据库的回调函数内,调用conn连接对象的execute方法
	//sql是sql查询语句
	//fun是回调
	conn.execute(sql, function(err, result){
		//err是错误反馈
		//result是执行execute的返回结果
	})
})

断开数据库连接

oracledb.getConnection(config, function(err, conn){
	//在连接数据库的回调函数内,调用conn连接对象的close方法
	//fun是回调
	conn.close(function(err){
		//err是错误反馈
	})
})

封装oracledb

封装可以是oracledb的使用更加的简洁方便

封装oracle连接

首先需要明确的是,连接过程是异步的,所以使用到了promise,在执行数据库连接完成后返回对应的连接对象或者错误信息,使用try catch是为了防止执行oracledb.getConnection过程出现错误导致程序出现错误

const Oracledb = require('oracledb');
function connect(config) {
  return new Promise(function (resolve, reject) {
    try {
      Oracledb.getConnection(config, function (err, conn) {
        if (err) {
          console.log("oracle数据库连接失败");
          resolve({
            status: -1,
            msg: '数据库连接失败',
            detail: err.message
          })  
          return
        }
        console.log("oracle数据库连接成功");
        resolve(conn);
      });
    } catch (ex) {
      console.log("oracle数据库连接出错");
      resolve({
        status: -1,
        msg: '数据库连接出错',
        detail: ex||'数据库连接时出现未知原因错误'
      })
    }
  });
}

封装oracle查询

同理,查询的过程也是异步的,因此这里同样使用promise来接收查询返回的结果,execute是conn对象的方法,所以需要将conn对象传入函数内

function execute(conn, sql) {
  return new Promise(function (resolve, reject) {
    try {
      conn.execute(
        sql,
        function (err, result) {
          if (err) {
            console.log(err.message)
            resolve({
              status: -1,
              msg: '执行sql语句失败',
              detail: err.message
            })
            return
          }
          resolve(result)
        });
    } catch (ex){
      console.log('执行execute出错')
      resolve({
        status: -1,
        msg: "执行sql语句出错",
        detail: ex||'执行execute发生未知错误'
      })
    }
  })
}

封装oracle断开

连接断开不需要异步,close是conn对象的方法,所以需要将conn对象传入函数内

function doRelease(conn) {
  conn.close(
    function (err) {
      if (err) {
        console.log(err.message)
        return
      }
      console.log('oracle数据库断开成功')
    });
}

使用

由于connect和execute函数都是异步操作,所以我们在使用的时候建议使用async、await来接收返回的结果

const {
  connect,
  doRelease,
  execute
} = require('./oracledb/oracle')
const  ORACLE_CONF = {
  user: "xxxx",
  password: "xxxx",
  connectString: "localhost:1521/orcl" //连接ip格式  ip:端口/数据库名称
}

async function query(config, sql){
  // 接收连接对象
  let conn = await connect(config)
  // 接收查询结果
  let data = await execute(conn, sql)
  // 关闭连接
  doRelease(conn)
  console.log(data)
}

let sql = `SELECT * FROM LKTB`
query(ORACLE_CONF, sql)

以上内容都是属于比较基础的使用,有兴趣的小伙伴可以自行去了解oracledb更详细的介绍

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐