1.封装oracle数据库连接使用
安装oracledb
npm i oracledb
创建oracledb.js文件
const Oracledb = require('oracledb');
module.exports={
//连接数据库
connect(config) {
return new Promise(function (resolve, reject) {
try {
Oracledb.getConnection(config, function (err, conn) {
if (err) {
console.log("oracle数据库连接失败");
resolve({
status: -1,
msg: '数据库连接失败',
detail: err.message
})
return
}
console.log("oracle数据库连接成功");
resolve(conn);
});
} catch (ex) {
console.log("oracle数据库连接出错");
resolve({
status: -1,
msg: '数据库连接出错',
detail: ex||'数据库连接时出现未知原因错误'
})
}
});
},
//执行sql语句
execute(conn, sql) {
return new Promise(function (resolve, reject) {
try {
conn.execute(
sql,
[],
{ outFormat: Oracledb.OBJECT },
function (err, result) {
if (err) {
console.log(111,err.message)
resolve({
status: -1,
msg: '执行sql语句失败',
detail: err.message
})
return
}
resolve(result)
});
} catch (ex){
console.log('执行execute出错')
resolve({
status: -1,
msg: "执行sql语句出错",
detail: ex||'执行execute发生未知错误'
})
}
})
},
//断开连接
doRelease(conn) {
conn.close(
function (err) {
if (err) {
console.log(err.message)
return
}
console.log('oracle数据库断开成功')
});
}
}
2.引入数据库连接方法
const {connect,execute,doRelease } = require('./oracle.js')
const DB_CONFIG = {
user: '',
password: '',
connectString: '' // 数据库地址:{IP:PORT/数据库名称}
}
3.书写二进制流转化为文件方法
function toChange(lob){
let buffer = Buffer.alloc(0);
lob.setEncoding('binary'); // 设置编码为二进制
lob.on('data', chunk => {
buffer = Buffer.concat([buffer, Buffer.from(chunk, 'binary')]);
});
lob.on('end', () => {
// 当所有LOB数据被读取后,将Buffer写入文件
//保存文件类型根据实际二进制流来进行决定,此处用1.pdf进行示例
fs.writeFile('1.pdf', buffer, (err) => {
if (err) {
console.error('Error saving file:', err);
} else {
console.log( name+' has been saved to file successfully.');
}
// 关闭数据库连接等后续操作...
});
});
lob.on('error', error => {
console.error('Error reading LOB data:', error);
// 处理LOB读取错误和关闭数据库连接等后续操作...
});
}
4.从数据库查询数据进行转化
async function select(){
let conn = await connect(orcal)
// let sql=`SELECT * FROM buffer `
let data = await execute(conn, sql)
// console.log(data.rows)
data.rows.map(row =>{
const lob=row.hp
transForm(lob)
})
console.log(data.rows)
// doRelease(conn)
}
5.完整使用方法
const fs = require('fs');
const path = require('path');
const {connect,execute,doRelease } = require('./oracle.js')
const orcal= {
user: '',
password: '',
connectString: '' // 数据库地址:{IP:PORT/数据库名称}
}
async function select(){
let conn = await connect(orcal)
// let sql=`SELECT * FROM buffer `
let data = await execute(conn, sql)
// console.log(data.rows)
data.rows.map(row =>{
const lob=row.hp
transForm(lob)
})
console.log(data.rows)
// doRelease(conn)
}
function toChange(lob){
let buffer = Buffer.alloc(0);
lob.setEncoding('binary'); // 设置编码为二进制
lob.on('data', chunk => {
buffer = Buffer.concat([buffer, Buffer.from(chunk, 'binary')]);
});
lob.on('end', () => {
// 当所有LOB数据被读取后,将Buffer写入文件
//保存文件类型根据实际二进制流来进行决定,此处用1.pdf进行示例
fs.writeFile('1.pdf', buffer, (err) => {
if (err) {
console.error('Error saving file:', err);
} else {
console.log( name+' has been saved to file successfully.');
}
// 关闭数据库连接等后续操作...
});
});
lob.on('error', error => {
console.error('Error reading LOB data:', error);
// 处理LOB读取错误和关闭数据库连接等后续操作...
});
}
select()