nodejs操作oracle数据库简单封装-node-oracledb模块

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36940798/article/details/84656549

一 安装模块

npm install oracledb

官方文档:https://www.npmjs.com/package/oracledb

安装免费的Oracle Instant Client ZIP

如果数据库位于远程计算机上,请执行以下步骤。其他条件请见https://oracle.github.io/node-oracledb/INSTALL.html#quickstart

1.从Oracle Technology Network下载免费的64位Instant Client Basic ZIP文件 。(32位Instant Client在 这里)。

  • 提取 instantclient-basic-windows.x64-18.3.0.0.0dbru.zip

  • 将其目录添加到PATH。例如,在Windows 7上,PATH在控制面板中更新 - >系统 - >高级系统设置 - >高级 - >环境变量 - >系统变量 - > PATH并添加您的路径,例如C:\oracle\instantclient_18_3

    如果安装了多个版本的Oracle库,请确保在PATH运行Node.js之前首先出现所需的版本。

    或者,将解压缩的Instant Client文件移动到这里, node_modules\oracledb\build\Release以便DLL和其他文件与oracledb.node二进制文件位于同一目录中。如果这样做,则PATH不需要设置。

2.(可选)创建默认的Oracle Client配置目录

如果您打算同定位可选的Oracle配置文件,如 tnsnames.orasqlnet.oraldap.ora,或 oraaccess.xml与即时客户端,可以将它们放在一个 C:\oracle\instantclient_18_3\network\admin子目录中。如果需要,创建它。

这是使用此Instant Client的应用程序的默认Oracle配置目录。

或者,配置文件可以放在另一个目录中。然后将环境变量TNS_ADMIN设置为该目录名称。

3.安装Visual Studio Redistributables

PATH变量需要包括相应的VS再分发:

还可以找到查找库OCI.DLL并运行所需的版本 :

dumpbin /dependents oci.dll

如果看到,MSVCR120.dll则需要VS 2013 Redistributable。如果看到,MSVCR100.dll则需要VS 2010 Redistributable。如果你看到MSVCR80.dll那么你需要VS 2005 Redistributable。

三 封装连接数据库代码

var oracledb = require('oracledb');

var query = function(sql,callback){
    oracledb.getConnection(
        {
            user          : "xxx",
            password      : "xxx",
            connectString : "x.x.x.x:11000/xxx"
        },
        function (err, connection)
        {
            if (err)
            {
                console.error(err.message);
                return;
            }/*else{
                console.log("连接成功");
            }*/
            connection.execute(sql, [], function (err, result)
            {
                if (err)
                {
                    console.error(err.message);
                    doRelease(connection);
                    return;
                }
                //console.log(result.metaData);
                callback(result.rows.map((v)=>
                    {
                        return result.metaData.reduce((p, key, i)=>
                        {
                            p[key.name] = v[i];
                            return p;
                        }, {})
                    }));
                doRelease(connection);
            });
        }
    );
}

function doRelease(connection) {
    connection.close(
        function(err) {
            if (err)
                console.error(err.message);
        });
}

exports.query = query;

四 测试

var db = require('./db');
db.query("SELECT count(*) count FROM X",function(result){
    console.log("查询数量:"+result[0].count)
})

猜你喜欢

转载自blog.csdn.net/qq_36940798/article/details/84656549