網站搜尋

javascript - 如何在類別和方法格式中定義 typescript/Oracledb npm 連接?


我正在嘗試使用 TypeScript 以類別和模組的格式連接 npm Oracledb。例如,

Import {Oracledb} from 'oracledb'
class ConnectDAO{

     public ConnectionDB(): connection{
         let connection = Oracledb.getConnection(// connection string);
         Return connection;
     }

     public fetchData(connection): recordset{
          connection.execute('query')
          Return rs;
     }

}

有人可以幫忙解決這個問題嗎

答案#1

這裡是一個完整的範例。只需填入你的連接字串...

import * as oracledb from 'oracledb';

let testConfig: oracledb.IConnectionAttributes = {
    user: `scott`,
    password: `tiger`,
    connectString: "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=..."
}

class ConnectDAO {
    public async ConnectionDB(): Promise<oracledb.IConnection> {
        return await oracledb.getConnection(testConfig);
    }
    public fetchData(connection: oracledb.IConnection):
        oracledb.IPromise<oracledb.IExecuteReturn> {
        return connection.execute('SELECT CURRENT_TIMESTAMP FROM dual');
    }
}

async function connectAndExecute() {
    let connectDao = new ConnectDAO();
    try {
        let connection = await connectDao.ConnectionDB();
        let results = await connectDao.fetchData(connection);
        console.log(`results : ${JSON.stringify(results, null, 4)}`)
    } catch (err) {
        console.log(`error caught ${err}`);
    }
}

connectAndExecute();

答案#2

安裝以下套件

npm i  oracledb @types/oracledb  --save

database.ts

import OracleDB from 'oracledb';

export default class DatabaseConnection {
    private oracleDB = OracleDB;
    private dbConfig = {
        user: "<<USER_NAME>>",
        password: "<<USER_PASSWORD>>",
        connectString: "(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST=<<YOUR_IP>>)(PORT = <<YOUR_PORT>>))(CONNECT_DATA =(SERVICE_NAME='<<YOUR_SERVICE_NAME>>')))"
    }

    public async init(): Promise<void> {
    }

    public async connectWithDB() {
        return new Promise((resolve, reject) => {
            this.oracleDB.getConnection(this.dbConfig, (err, connection) => {
                if (err) {
                    reject(err.message);
                }
                console.log('Connected with Database...');
                resolve(connection);
            });
        });
    }

    public doRelease(connection) {
        connection.release((err) => {
            if (err)
                console.error(err.message);
            console.log('connection released');
        });
    }
}

App.js

在您的 App.js/Service.js 文件中導入數據庫文件

import DatabaseConnection from './database';

為此建立一個類別變數

public dbConnect = new DatabaseConnection;

在同一檔案中添加以下方法

private async connectToDB() {
    await this.dbConnect.connectWithDB().then(async (connection: any) => {
        await connection.execute("SELECT * FROM User", [], (err, result) => {
            if (err) {
                console.error(err.message);
            }
            console.log(result.metaData);
        });
        this.dbConnect.doRelease(connection);
    }).catch(error => {
        console.log(error);
    });
}