使用node-oracledb创建连接池,外部建立连接
来源:互联网 发布:中国无风险利率数据 编辑:程序博客网 时间:2024/05/22 02:27
接触node也有一小段时间了,之前练习一直使用的是mariadb(centos默认这个),使用node加载mysql驱动使用一切正常
碰到的绝大部分问题都可以查到,案例代码也相当多
但是近期由于业务需求转用oracle,先不提在centos上安装oracle client上有多吐血,各种依赖啊环境变量啊啥的,
node连接oracle的资料国内实在是太少了,而且在去年发布官方版本之前还存在一些大神开发的"原始版"的驱动(这里有人说山寨版,但是人家是在官方版之前发布的啊)
导致了网上一些关于node-oracle的资料文章所针对的驱动大相径庭,代码自然也是匹配不少
所以在使用node-oracle之前希望诸位先确认自己使用的是否是官方驱动
正是因为冷门所以我觉得有必要写下如何使用node-oracledb创建连接池,外部建立连接这个基础的操作
首先先看下mysql下node是如何创建连接池的
var mysql = require('mysql');
var pool = mysql.createPool({
host : “hostName”,
user : “username”,
password: “password”
});
pool.getConnection(function(err, connection){
});
没错就是这么简单,在创建线程池后就可以直接使用了
正是因为有这种惯性思维,在创建oracle的线程池的时候我便使用了同样的方法
var pool = oracledb.createPool(
{
user : dbConfig.password,
password : dbConfig.password,
connectString : dbConfig.connectString
},
function(err, pool){
...
}
);
pool.getConnection(function(err, connection){
});
然后...就懵逼了....
报错原因是
Cannot read property 'getConnection' of undefined
很显然是这个pool没有创建出来
为什么没有创建出来呢,这个问题应该先问问谷歌百度,但是查了半天却只找到了这么一篇文章 查看文章
基本上是明白啥原因了,明显是因为非阻塞导致的在创建pool之前先建立了连接,如果直接使用定时器去做阻塞未免有些原始,
因此在对async异步做了简单了解后,便对代码略加修改最终实现了外部建立连接
var oraclepool;
//①定义线程池
var getnewpool = function (poolstats){
oracledb.createPool({
user: dbconfig.user,
password: dbconfig.password,
connectString: dbconfig.connectString
},function (err,pool) {
oraclepool = pool;//把创建的线程池转为全局变量
console.log("connectpool establish!!");
poolstats(err,null);
})
}
//检查线程池存在与否
var checkpool = function (cb) {
if(oraclepool == undefined){
getnewpool(cb);
}else{
console.log("线程池创建过啦");
cb(null);
}
}
//连接线程池操作
var getpoolinfo = function(poolstats) {
oraclepool.getConnection(function(err, connection) {
//这里记得返回一下poolstats
});
}
//第一次执行sql
async.series([
checkpool,
getpoolinfo,
], function (err, result) {
if(err) console.log(err);
});
//第二次执行(这里为了模拟用户操作同时避免同步造成创建多个线程池)
setTimeout(function () {
async.series([
checkpool,
getpoolinfo
], function (err, result) {
if(err) console.log(err);
oraclepool.close();
console.log("线程池已关闭");
});
},2000);
这里声明了建立连接池,检查连接池是否建立,执行sql语句,模拟用户二次执行sql语句
运行后可得结果
connectpool establish!!
线程池创建过啦
线程池已关闭
- 使用node-oracledb创建连接池,外部建立连接
- 使用node连接mySQL,封装自定义模块供外部调用
- [linux][node]软连接建立
- Node.js使用MySQL的连接池
- Node.js 连接 postgreSQL数据库 (使用连接池pool)
- 建立连接池连接数据库
- 使用DBCP创建连接池
- 使用c3p0创建连接池
- node-oracledb 安装
- node-oracledb安装记录
- Node.js在MySQL中存储数据 & 创建连接池
- 连接池的建立
- 使用MIDP建立HTTP连接
- 数据库建立、连接及使用
- 使用socket建立长连接
- 建立连接
- 建立连接
- 一步步学习SPD2010--第七章节--使用BCS业务连接服务(2)--创建数据库外部数据源
- void linphone_core_iterate(LinphoneCore *lc)函数研究分析
- MWPhotoBrowser的简单使用
- 使用scikit-learn进行机器学习的简介(教程1)
- c++记录
- php数组
- 使用node-oracledb创建连接池,外部建立连接
- Android实例
- 微信公众号开发-iphone手机时间显示NaN:NaN的问题修改
- 如何在 Windows 10 中搭建 Node.js 环境?
- Spring源码学习笔记(三)AOP实现
- Jersey+jetty 搭建高并RestFull 接口服务
- 关于iPhone6/6s分辨率的那些事
- Java线程之锁对象高效同步(ReentrantLock/ReentrantReadWriteLock)
- IDEA集成的 Thrift 插件进行 thrift 编译