Node实现连接达梦数据库
node实现连接达蒙数据库
·
Node实现连接达梦数据库
1、创建DataBaseUtilsDM.js文件用于封装达梦数据库连接
使用的是Node中的egg框架,DataBaseUtilsDM.js文件,主要为了达梦数据连接以及封装的快速查询和删除操作还有clob数据的快速的转换
'use strict'
// 达梦数据库连接封装
const CLASS = function() {
this.db = require('dmdb')
this.pool = ''
this.conn = ''
}
CLASS.prototype = {
// 封装查询数据以及数据处理返回
async select(sql) {
this.pool = await this.createPool()
this.conn = await this.getConnection()
const list = await this.conn.execute(sql)
const arr1 = []
for (let i = 0; i < list.rows.length; i++) {
const RowDataPacket = {}
list.metaData.forEach((val, index) => {
RowDataPacket[val.name] = list.rows[i][index]
})
arr1.push(RowDataPacket)
}
return arr1
},
async delete(sql) {
this.pool = await this.createPool()
this.conn = await this.getConnection()
const res = await this.conn.execute(sql)
this.conn.commit(function(err) { // 提交事务
console.log(err)
})
return res
},
// async convertClob(val, argName) {
// const value = await this.readLob(val[argName])
// await val[argName].close()
// return value.toString('utf-8')
// },
// 封装clob数据转换赋值
async convertClob(value, argName) {
for (const name of argName) {
const data = await this.readLob(value[name])
await value[name].close()
value[name] = data.toString('utf-8')
}
},
// 处理达梦数据库的clob数据类型
async readLob(lob) {
return new Promise(function(resolve, reject) {
let blobData = Buffer.alloc(0)
let 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 createPool() {
try {
return this.db.createPool({
connectString: 'dm://MXK:warsim888\@192.168.31.314:5236?autoCommit=false',
poolMax: 10,
poolMin: 1
})
} catch (err) {
throw new Error('createDMPool error: ' + err.message)
}
},
// 获取数据库连接
async getConnection() {
try {
return this.pool.getConnection()
} catch (err) {
throw new Error('getDMConnection error: ' + err.message)
}
}
}
module.exports = CLASS
2、在项目接口中如何使用达梦数据库增删改查
// 1、首先需要在页面的最上方声明引入达梦数据库封装的来源
const DataBaseUtils = require('../utils/DataBaseUtilsDM')
// 2、其次就可以通过使用封装的方法来快速使用
const dm = new DataBaseUtils()
const sqlRes = await dm.select('SELECT * FROM scen_recording')
// 3、注意查询出的数据有时个别类型为clob类型,此类型不处理直接传给前端会报500错误,原因为clob类型数据其实是个函数,函数无法通过http传给前端
// 封装有快速转换的方法
for (const val of sqlRes) {
// 处理达梦 clob 数据 ,数组中是要处理的具体参数
await dm.convertClob(val, ['ScenID', 'ScenName'])
}
// 4、增删改和查询不同,在达梦数据库中,设计数据库变动的都需要执行完sql语句后提交事务才会更改数据库
// 所以增删改使用封装的delete方法来使用
const result = await dm.delete(`INSERT INTO scen_armyicon (scenId, guid, icon, direction)
VALUES ('${scenId}','${guid}','${icon}','${direction}')`)
// 5、注意在达梦中返回的接口和mysql的判定成功不同,需对rowsAffected此参数进行判断是否成功影响
const insertSuccess = result.rowsAffected === 1
– 更为具体的要求配置访问 https://eco.dameng.com/document/dm/zh-cn/pm/nodejs-rogramming-guide.html 达梦官方文档
更多推荐
已为社区贡献1条内容
所有评论(0)