/** * 数据库工具,使用数据库连接池获取连接,执行查询,之后将连接返回连接池。 */ "use strict"; let configFile = require('../include/commons').CONFIG_FILE; let config = require('../resources/config/' + configFile); let log = require('./log'); let crypto = require('crypto'); class DbUtil { constructor() { } static execQuery(pool, options) { if (config.showSQL) log.info(options.sql); pool.getConnection(function (err, connection) { let sql = options['sql']; let args = options['args']; let handler = options['handler']; if (err) { return handler(err, null); } // 执行查询 if (args) { connection.query(sql, args, function (err, results) { if (err) { log.error("Execute SQL failed, arguments: " + args + ", sql: " + sql); return handler(err, results); } handler(null, results); }); } else { connection.query(sql, function (err, results) { if (err) { log.error("Execute SQL failed: " + sql); return handler(err, results); } handler(null, results); }); } // 返回连接池 connection.release(function (err) { if (err) { log.error('Database - release connection failed, ' + err); } }); }); } /** * 为字符串数组生成一个Hash值,为保证唯一性,生成前先对数组进行排序。 * * @param stringArray */ static stringArrayHash(stringArray) { let sortedArr = stringArray.sort(); return crypto.createHash("sha1").update(sortedArr.join(",")).digest('hex'); } } module.exports = DbUtil;