在Oracle Linux 8上连接OracleDB与Nodejs
#javascript #node #linux #oraclecloud

如何将Oracle Cloud数据库连接到Oracle Linux 8

上的nodejs后端

Decoration image of database with caption Oracle and NodeJS

数据库对于许多实用软件应用程序至关重要,因为它们允许对数据进行持久,分析和操纵。将应用程序连接到数据库是开发人员的常见要求,并且此功能通常由各种编程语言支持。

一种这样的语言就是nodejs,它提供了用于在基于节点的应用程序和Oracle数据库之间建立连接的oracledb Node package

要开始连接到云数据库,您将需要一个部署的Oracle数据库,您可以从中访问其云钱包。请参阅Oracle的Autonomous Databases

软件版本

本教程假设Oracle Linux 8和Oracle自主数据库21C。我们将使用节点V18和oracledb 5.1.0。截至2023年3月,本教程是准确的。

如何开始

  1. 我们建议您首先更新您的所有软件包:
sudo yum update -y && sudo yum upgrade -y

2。确保安装了这些Linux软件包:

sudo yum install nodejs
sudo yum install wget
sudo yum install glibc

3。使用以下外壳代码下载并安装Oracle Instant Client for Linux x86–64 Version 21.9 Basic Package (OL8 RPM)。还可以在链接网页的底部找到详细的安装说明:

wget https://download.oracle.com/otn_software/linux/instantclient/219000/oracle-instantclient-basic-21.9.0.0.0-1.el8.x86_64.rpm
sudo yum install oracle-instantclient-basic-21.9.0.0.0-1.el8.x86_64.rpm

4。更新您的PATH环境:

export PATH=/usr/lib/oracle/21/client64/bin:$PATH

5。 Provision Oracle Cloud上的自主数据库实例,然后下载钱包

Screenshot of Oracle Cloud console leading to download the database wallet
Oracle Cloud Console的屏幕截图,导致数据库钱包的下载

6。解开钱包:

sudo cp Wallet_*.zip /usr/lib/oracle/21/client64/lib/network/admin/
sudo sh -c 'cd /usr/lib/oracle/21/client64/lib/network/admin/ && unzip -B Wallet_*.zip'

应该存在包括/usr/lib/oracle/21/client64/lib/network/admin/tnsnames.ora在内的钱包文件。

7。在同一目录中创建这两个文件:

package.json

{
  "name": "Demo",
  "version": "1.0.0",
  "private": true,
  "description": "Demo app",
  "keywords": [
    "myapp"
  ],
  "dependencies": {
    "oracledb": "^5.1.0"
  },
  "author": "You",
  "license": "MIT"
}

example.js

const oracledb = require("oracledb");

async function run() {
  let connection;

  try {
    connection = await oracledb.getConnection({
      user: "myuser",   // TODO CHANGE THIS 
      password: "mypassword",    // TODO CHANGE THIS 
      connectionString: "db_high",    // TODO CHANGE THIS 
    });

    console.log("Successfully connected to Oracle Database");

    // Create a table

    await connection.execute(`begin
                                execute immediate 'drop table todoitem';
                                exception when others then if sqlcode <> -942 then raise; end if;
                              end;`);

    await connection.execute(`create table todoitem (
                                id number generated always as identity,
                                description varchar2(4000),
                                creation_ts timestamp with time zone default current_timestamp,
                                done number(1,0),
                                primary key (id))`);

    // Insert some data

    const sql = `insert into todoitem (description, done) values(:1, :2)`;

    const rows = [
      ["Task 1", 0],
      ["Task 2", 0],
      ["Task 3", 1],
      ["Task 4", 0],
      ["Task 5", 1],
    ];

    let result = await connection.executeMany(sql, rows);

    console.log(result.rowsAffected, "Rows Inserted");

    connection.commit();

    // Now query the rows back

    result = await connection.execute(
      `select description, done from todoitem`,
      [],
      { resultSet: true, outFormat: oracledb.OUT_FORMAT_OBJECT }
    );

    const rs = result.resultSet;
    let row;

    while ((row = await rs.getRow())) {
      if (row.DONE) console.log(row.DESCRIPTION, "is done");
      else console.log(row.DESCRIPTION, "is NOT done");
    }

    await rs.close();
  } catch (err) {
    console.error(err);
  } finally {
    if (connection) {
      try {
        await connection.close();
      } catch (err) {
        console.error(err);
      }
    }
  }
}

run();

相应地更新userpassword。并将connectionString更改为/usr/lib/oracle/21/client64/lib/network/admin/tnsnames.ora中的等效值。

8。安装并运行应用程序:

npm install
node example.js

,你去了!如果您看到一些日志,并且看不到任何错误,则意味着连接是建立的!

参考

  1. Developing Node.js Applications for Oracle Autonomous Database

安全港口陈述
此渠道/文章/故事中提供的信息仅用于信息目的,不能用作任何合同协议的一部分。内容不能保证提供任何材料,代码或功能,也不应成为做出购买决策的唯一基础。本网站上的帖子是我自己的,不一定反映了Oracle或Mythics,LLC的观点或作品。

这项工作是根据Creative Commons Attribution 4.0 International License许可的。