Explorar o código

达梦数据库改造

wangzhinan hai 1 ano
pai
achega
ae941cdb3f

+ 1 - 0
src/server/package.json

@ -13,6 +13,7 @@
    "cookie-parser": "~1.3.5",
    "cron-builder": "^0.3.0",
    "debug": "~2.2.0",
    "dmdb": "^1.0.19862",
    "express": "~4.12.4",
    "jade": "~1.9.2",
    "jquery": "^3.1.1",

+ 148 - 0
src/server/repository/mysql/db/dmdba.js

@ -0,0 +1,148 @@
var db = require('dmdb');
var fs = require('fs');
var pool, conn;
async function example() {
    try {
        pool = await createPool();
        conn = await getConnection();
   /*     await insertTable();
        await updateTable();*/
        await queryTable();
    /*    await queryWithResultSet();
        await deleteTable();*/
    } catch (err) {
        console.log(err);
    } finally {
        try {
            await conn.close();
            await pool.close();
        } catch (err) {}
    }
}
example();
//创建连接池
async function createPool() {
    try {
        return db.createPool({
            connectString: "dm://SYSDBA:SYSDBA@172.26.0.183:5236?schema=im",
            poolAlias:"im",
            poolMax: 10,
            poolMin: 1
        });
    } catch (err) {
        throw new Error("createPool error: " + err.message);
    }
}
//获取数据库连接
function getConnection() {
    try {
        return pool.getConnection();
    } catch (err) {
        throw new Error("getConnection error: " + err.message);
    }
}
//往产品信息表插入数据
async function insertTable() {
    try {
        var sql = "INSERT INTO production.product(name,author,publisher,publishtime,"
            +
            "product_subcategoryid,productno,satetystocklevel,originalprice,nowprice,discount,"
            + "description,photo,type,papertotal,wordtotal,sellstarttime,sellendtime) "
            + "VALUES(:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17);";
        var blob = fs.createReadStream("c:\\三国演义.jpg");
        await conn.execute(
            sql,
            [
                { val: "三国演义" },
                { val: "罗贯中" },
                { val: "中华书局" },
                { val: new Date("2005-04-01") },
                { val: 4 },
                { val: "9787101046121" },
                { val: 10 },
                { val: 19.0000 },
                { val: 15.2000 },
                { val: 8.0 },
                { val:"《三国演义》是中国第一部长篇章回体小说,中国小说由短篇发展至长篇的原因与说书有关。"},
                { val: blob },
                { val: "25" },
                { val: 943 },
                { val: 93000 },
                { val: new Date("2006-03-20") },
                { val: new Date("1900-01-01") }
            ]
        );
    } catch (err) {
        throw new Error("insertTable error: " + err.message);
    }
}
//修改产品信息表数据
async function updateTable() {
    try {
        var sql = "UPDATE production.product SET name = :name " + "WHERE productid = 11;";
// 按名称绑定变量
        return conn.execute(sql, { name: { val: "三国演义(上)" } });
    } catch (err) {
        throw new Error("updateTable error: " + err.message);
    }
}
//删除产品信息表数据
async function deleteTable() {
    try {
        var sql = "DELETE FROM production.product WHERE productid = 11;"
        return conn.execute(sql);
    } catch (err) {
        throw new Error("deleteTable error: " + err.message);
    }
}
//查询产品信息表
async function queryTable() {
    try {
        var sql = "SELECT * FROM topics"
        var result = await conn.execute(sql);
        var lob = result.rows;
        console.log(lob);
        return result;
    } catch (err) {
        throw new Error("queryTable error: " + err.message);
    }
}
//读取数据库返回的Lob对象
function readLob(lob) {
    return new Promise(function (resolve, reject) {
        var blobData = Buffer.alloc(0);
        var totalLength = 0;
        lob.on('data', function (chunk) {
            totalLength += chunk.length;
            blobData = Buffer.concat([blobData, chunk], totalLength);
        });
        lob.on('error', function (err) {
            reject(err);
        });
        lob.on('end', function () {
            resolve(blobData);
        });
    });
}
//结果集方式查询产品信息表
async function queryWithResultSet() {
    try {
        var sql = "SELECT productid,name,author,publisher FROM production.product";
        var result = await conn.execute(sql, [], { resultSet: true });
        var resultSet = result.resultSet;
        // 从结果集中获取一行
        result = await resultSet.getRow();
        while (result) {
            console.log(result);
            result = await resultSet.getRow();
        }
    } catch (err) {
        throw new Error("queryWithResultSet error: " + err.message);
    }
}

+ 60 - 16
src/server/repository/mysql/db/im.db.js

@ -1,25 +1,69 @@
/**
 * IM数据库。
 * 数据库连接 达梦直连
 * @type {string}
 */
"use strict";
var configFile = require('../../../include/commons').CONFIG_FILE;
var config = require('../../../resources/config/' + configFile);
let configFile = require('../../../include/commons').CONFIG_FILE;
let config =  require('../../../resources/config/' + configFile);
var dmdb = require('dmdb');
var dbUtil = require('../../../util/db.util');
let dmdb = require('dmdb');
let log = require('../../../util/log.js');
var pool = dmdb.createPool({
    connectionString: 'dm://SYSDBA:SYSDBA@172.26.0.183:5236?schema=im',
});
let execQuery = function(options){
    dmdb.getConnection(config.imDbConfig,
        function (err, connection)
        {
class ImDb {
    constructor() {
    }
            let sql = options['sql'];
            let args = options['args'];
            let handler = options['handler'];
            log.info(options.sql)
            log.info(options.args)
    static execQuery (options) {
        dbUtil.execQuery(pool, options);
    };
            if (err)
            {
                console.error(err.message);
                return handler(err, null);
            }
            connection.execute(sql, args,{autoCommit:true}, function (err, result)
            {
                if (err) {
                    log.error(err.message)
                    log.error("Execute SQL failed: sql" + sql);
                    log.error("Execute SQL failed: args" + args);
                    doRelease(connection);
                    return handler(err, result);
                }
                //console.log(result);
                if(!result.rows ||  result.rows.length == 0){
                    handler(null, result.rows);
                }else{
                    handler(null, result.rows.map((v)=>
                    {
                        return result.metaData.reduce((p, key, i)=>
                        {
                            // log.info("开始组装数据库返回值:"+i)
                            p[key.name] = v[i];
                            //log.info(p)
                            return p;
                        }, {})
                    }));
                }
                doRelease(connection);
            });
        }
    );
}
function doRelease(connection) {
    connection.close(
        function(err) {
            if (err)
                console.error(err.message);
        });
}
module.exports = ImDb;
exports.execQuery = execQuery;

+ 7 - 8
src/server/resources/config/config.dev.js

@ -1,19 +1,18 @@
"use strict";
let imDbConfig = {
    host: '172.19.103.77',
    user: 'root',
    password: '123456',
    database: 'im_new',
    connectionLimit: '50',
    charset: 'utf8mb4'
    user:"SYSDBA",
    password:"SYSDBA",
    connectionString: "172.26.0.183:5236",
    schema:"im"
};
// Redis
let redisConfig = {
    host: '192.168.131.172',
    host: '172.26.0.253',
    port: 6379,
    db: 6
    db: 1,
    password:'Kb6wKDQP1W4'
};
// let redisConfig = {
//     host: '192.168.1.220',

+ 6 - 6
src/server/resources/config/config.test.js

@ -1,12 +1,12 @@
"use strict";
let imDbConfig = {
    host: '172.26.0.104',
    user: 'ssgg',
    password: 'ssgg@jkzl2019',
    database: 'im_internet_hospital',
    connectionLimit: '50',
    charset: 'utf8mb4'
    user:"SYSDBA",
    password:"SYSDBA",
    connectionString: "172.26.0.183:5236",
    poolMax: 10,
    poolMin: 1,
    schema:"im"
};
// Redis

+ 70 - 0
src/server/util/dmdb.util.js

@ -0,0 +1,70 @@
let configFile = require('../include/commons').CONFIG_FILE;
let config = require('../resources/config/' + configFile);
let dmdb = require('dmdb');
let log = require('../util/log.js');
let query = function(options){
    dmdb.getConnection(
        {
            user: config.imDbConfig.user,
            password: config.imDbConfig.password,  // mypw contains the hr schema password
            connectString: config.imDbConfig.connectString
            // poolAlias: "im"
        },
        function (err, connection)
        {
            let sql = options['sql'];
            let args = options['args'];
            let handler = options['handler'];
            log.info(options.sql)
            log.info(options.args)
            if (err)
            {
                console.error(err.message);
                return handler(err, null);
            }
            connection.execute(sql, args,{autoCommit:true}, function (err, result)
            {
                if (err) {
                    log.error(err.message)
                    log.error("Execute SQL failed: sql" + sql);
                    log.error("Execute SQL failed: args" + args);
                    doRelease(connection);
                    return handler(err, result);
                }
                //console.log(result);
                if(!result.rows ||  result.rows.length == 0){
                    handler(null, result.rows);
                }else{
                    handler(null, result.rows.map((v)=>
                    {
                        return result.metaData.reduce((p, key, i)=>
                        {
                            // log.info("开始组装数据库返回值:"+i)
                            p[key.name] = v[i];
                            //log.info(p)
                            return p;
                        }, {})
                    }));
                }
                doRelease(connection);
            });
        }
    );
}
function doRelease(connection) {
    connection.close(
        function(err) {
            if (err)
                console.error(err.message);
        });
}
exports.query = query;