You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Node.js连接Oracle数据库失败求助(含NJS-045/DPI-1047报错)

Node.js连接Oracle数据库:解决NJS-045/DPI-1047错误

我之前也碰到过一模一样的问题,这个报错的核心原因很明确:node-oracledb模块依赖64位的Oracle客户端库,但你的系统里要么没装,要么路径没配置对。下面是一步步的解决方法:

步骤1:安装64位Oracle Instant Client

node-oracledb不能直接连接Oracle,必须依赖Oracle官方的客户端库。你需要下载对应版本的64位Instant Client包:

  • 选择BasicBasic Light版本(Basic功能更全,Basic Light体积更小)
  • 确保版本和你的Node.js位数匹配(你的是win32 x64,所以选x64包),同时尽量和目标Oracle数据库版本兼容(比如数据库是11g就选11g的客户端,19c就选19c的)

解压下载的压缩包到一个固定路径,比如C:\oracle\instantclient_19_12

步骤2:配置系统PATH环境变量

把刚才解压的Instant Client路径添加到系统的PATH环境变量中:

  • 右键“此电脑” → 属性 → 高级系统设置 → 环境变量
  • 在系统变量里找到PATH,点击编辑,添加C:\oracle\instantclient_19_12(替换成你的实际路径)
  • 注意:如果PATH里有其他32位Oracle相关的路径,把64位的路径移到最前面,避免优先级冲突

步骤3:安装对应版本的Visual Studio Redistributable

Oracle客户端库依赖微软的VS运行时库,不同版本的Instant Client对应不同的VS版本:

  • 比如Instant Client 19c需要VS 2017的x64 Redistributable
  • 安装完成后记得重启你的终端或IDE,让所有环境变量生效

步骤4:检查并优化你的连接代码

你的代码本身逻辑没问题,但可以调整成async/await风格更易维护,同时注意connectString的格式(默认Oracle端口是1521,如果你的数据库用了其他端口要加上):

const oracledb = require('oracledb');

async function connectToOracle() {
  let connection;
  try {
    // 建立连接
    connection = await oracledb.getConnection({
      user: "你的用户名",
      password: "你的密码",
      connectString: "192.168.177.106:1521/mymmsrev-local" // 补充端口号
    });
    console.log('✅ Oracle数据库连接成功!');
    
    // 这里可以添加查询等业务逻辑,比如:
    // const result = await connection.execute('SELECT * FROM YOUR_TABLE');
    // console.log(result.rows);
  } catch (err) {
    console.error('❌ 连接失败:', err.message);
  } finally {
    // 确保连接关闭
    if (connection) {
      try {
        await connection.close();
        console.log('🔌 连接已关闭');
      } catch (err) {
        console.error('❌ 关闭连接失败:', err.message);
      }
    }
  }
}

// 执行连接函数
connectToOracle();

额外注意事项

  • 确认你的Node.js是64位版本(你当前用的是8.9.4 x64,符合要求)
  • 如果你的电脑上之前装过Oracle数据库本地客户端,也要确保它的64位库路径在PATH里,或者直接用Instant Client更轻便
  • 测试连接前一定要重启终端/IDE,否则新的PATH配置不会生效

内容的提问来源于stack exchange,提问作者Ajay Thakur

火山引擎 最新活动