Как выполнить фиксацию и откат транзакции с использованием пула DB2 в NodeJS - PullRequest
0 голосов
/ 05 ноября 2018

Я использую ibm_db в nodejs.

Из документации модуль idb_db я знаю, что db2 имеет откат транзакции и фиксацию.

Мой вопрос здесь: как мне получить доступ к классу / интерфейсу базы данных из модуля ibm_db.

Я все еще хочу использовать функцию пула db2 для управления моим пулом базы данных, но я все еще хочу иметь откат транзакции и фиксацию для моего класса контроллера, так как у меня есть несколько операторов sql для нескольких таблиц.

Класс контроллера:

//begin tranaction
try {
    //SOME SQL 1
    //SOME SQL 2
    //COMMIT
}
catch (err) {
    //ROLLBACK
}
//end transaction

Класс DAO:

var connectionString = require('../common/ibmdb2Pool').connectionString;
var connString = connectionString();

var initPool = require('../common/ibmdb2Pool').initPool;
var pool = initPool();

const query = require('../db/query');

function updatePerson(params, fin, callback) {
    pool.open(connString, function (err, conn) {

        conn.prepare(query.SQL_UPDATE_PERSON, function (error, stmt) {

            if (err) {
                console.error(err);
                return conn.closeSync();
            }

            stmt.executeNonQuery(params, function (err, result) {
                if( err ) {   
                    console.error(err);  
                }
                else {
                    console.debug("Affected rows = " + result);
                }

                //Close the connection
                conn.close();

                //return result as callback. 
                return callback([fin, result]);
            });
        });
    });
}

Класс ibmdb2Pool:

//imports
require('dotenv').config();

var Pool = require("ibm_db").Pool;

// access the environment variables for this environment
...   
const CONNSTRING = DATABASE + HOSTNAME + UID + PWD + DB_PORT + PROTOCOL;

//variables
const MIN_POOL_SIZE = 20;
const MAX_POOL_SIZE = 100;

//return connection string from environment file.
exports.connectionString = function () {
    return CONNSTRING;
};

//init the db pool with a min and max size
exports.initPool = function () {
    var pool = new Pool();

    var ret = pool.init(MIN_POOL_SIZE, CONNSTRING);

    if(ret !== true) {

        console.error("Cannot init pool. " + ret);
    }

    pool.setMaxPoolSize(MAX_POOL_SIZE);

    return pool;
};
...