oracledb¶
This page explains how to use ts-sql-query
with the oracledb driver. It covers three approaches: using a connection pool promise, using a connection pool or using a single connection directly.
Supported databases
Do not share connections between requests
A ts-sql-query
connection object — along with the query runner instances passed to its constructor — represents a dedicated connection to the database.
Therefore, you must not share the same connection object between concurrent HTTP requests. Instead, create a new connection object for each request, along with its own query runners.
Even if the query runner internally uses a connection pool, the ts-sql-query
connection still represents a single active connection, acquired from the pool. It must be treated as such and never reused across requests.
Using a connection pool promise¶
Executes queries through a oracledb connection obtained from a pool promise.
import { createPool } from 'oracledb';
import { OracleDBPoolPromiseQueryRunner } from "ts-sql-query/queryRunners/OracleDBPoolPromiseQueryRunner";
const poolPromise = createPool({
user: 'user',
password: 'pwd',
connectString: 'localhost/XEPDB1'
});
async function closePoolAndExit() {
try {
const pool = await poolPromise;
await pool.close(10);
process.exit(0);
} catch(err) {
process.exit(1);
}
}
process
.once('SIGTERM', closePoolAndExit)
.once('SIGINT', closePoolAndExit)
.once('beforeExit', closePoolAndExit);
async function main() {
const connection = new DBConnection(new OracleDBPoolPromiseQueryRunner(poolPromise));
// Do your queries here
}
Using a connection pool¶
Executes queries through a oracledb connection obtained from a pool.
import { createPool } from 'oracledb';
import { OracleDBPoolQueryRunner } from "ts-sql-query/queryRunners/OracleDBPoolQueryRunner";
const poolPromise = createPool({
user: 'user',
password: 'pwd',
connectString: 'localhost/XEPDB1'
});
async function closePoolAndExit() {
try {
const pool = await poolPromise;
await pool.close(10);
process.exit(0);
} catch(err) {
process.exit(1);
}
}
process
.once('SIGTERM', closePoolAndExit)
.once('SIGINT', closePoolAndExit)
.once('beforeExit', closePoolAndExit);
async function main() {
const pool = await poolPromise;
const connection = new DBConnection(new OracleDBPoolQueryRunner(pool));
// Do your queries here
}
Using a single connection¶
Executes queries through a dedicated oracledb connection.
import { createPool } from 'oracledb';
import { OracleDBQueryRunner } from "ts-sql-query/queryRunners/OracleDBQueryRunner";
async function init() {
try {
await createPool({
user: 'user',
password: 'pwd',
connectString: 'localhost/XEPDB1'
});
await main();
} finally {
await closePoolAndExit();
}
}
async function closePoolAndExit() {
try {
await oracledb.getPool().close(10);
process.exit(0);
} catch(err) {
process.exit(1);
}
}
process
.once('SIGTERM', closePoolAndExit)
.once('SIGINT', closePoolAndExit)
.once('beforeExit', closePoolAndExit);
init();
async function main() {
const oracleConnection = await oracledb.getConnection();
try {
const connection = new DBConnection(new OracleDBQueryRunner(oracleConnection));
// Do your queries here
} finally {
await oracleConnection.close();
}
}