jh-common-dataaccess
Version:
common-dataaccess
118 lines (116 loc) • 2.78 kB
JavaScript
const mysql = require('mysql');
const DatabaseHelper = require('./DatabaseHelper');
module.exports = class MysqlHelper extends DatabaseHelper {
constructor() {
super(arguments[0]);
}
connect() {
return new Promise((resolve, reject) => {
try {
const connection = mysql.createConnection(this.config);
connection.connect();
connection.config.queryFormat = function(query, values) {
if (!values) return query;
return query.replace(/\@(\w+)/g, (txt, key) => {
if (values.hasOwnProperty(key)) {
return this.escape(values[key]);
}
return txt;
});
};
resolve(connection);
} catch (err) {
this.print(err);
reject('mysql connect error');
}
});
}
query(sqlstr) {
return new Promise((resolve, reject) => {
this.connect()
.then(client => {
client.query(sqlstr, (err, result) => {
if (err) {
reject(err.message);
} else {
result.forEach(row => {
Object.keys(row).forEach(key => {
if (row[key] instanceof Date) {
row[key] = this.formatDate(row[key]);
}
});
});
resolve(result);
}
client.end();
});
})
.catch(err => {
reject(err);
});
});
}
execute(sqlstr) {
return new Promise((resolve, reject) => {
this.connect()
.then(client => {
client.query(sqlstr, (err, result) => {
if (err) {
reject(err.message);
} else {
let flag = true;
if (result instanceof Array) {
result.forEach(item => {
flag = flag && item.affectedRows > 0;
});
} else {
flag = result.affectedRows > 0;
}
resolve(flag);
}
client.end();
});
})
.catch(err => {
reject(err);
});
});
}
translate(transParams) {
return new Promise((resolve, reject) => {
this.connect()
.then(client => {
const queryObj = {};
transParams.l_dp.forEach(dp => {
if (dp.paramsvalue instanceof Date) {
dp.paramsvalue = this.formatDate(dp.paramsvalue);
}
queryObj[dp.paramsname] = dp.paramsvalue;
});
client.query(transParams.sql, queryObj, (err, result) => {
if (err) {
reject(err.message);
} else {
let flag = true;
if (result instanceof Array) {
result.forEach(item => {
flag = flag && item.affectedRows > 0;
});
} else {
flag = result.affectedRows > 0;
}
resolve(flag);
}
client.end();
});
})
.catch(err => {
reject(err);
});
});
}
static datapager(pageno, pagesize, sqlstr, sp) {
return ` ${sqlstr} order by ${sp.Field} ${sp.SortDirection || ''} limit ${pagesize *
(pageno - 1)}, ${pagesize} `;
}
};