使用nodejs连接达梦数据库,参照eco的nodejs文档,查询数据库返回的数据出错。
nodejs代码如下:
// 引入 dmdb 包
var db = require('dmdb');
var fs = require('fs');
var pool, conn;
var http = require('http');
async function example() {
try {
pool = await createPool();
conn = await getConnection();
await query();
} 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@localhost:5237?autoCommit=false&loginEncrypt=false",
poolMax: 10,
poolMin: 1
});
} catch (err) {
throw new Error("createPool error: " + err.message);
}
}
/* 获取数据库连接 */
async function getConnection() {
try {
return pool.getConnection();
} catch (err) {
throw new Error("getConnection error: " + err.message);
}
}
/* 查询 */
async function query() {
try {
var sql = "SELECT TEST1 FROM SYSDBA.T2";
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);
}
}
数据库表结构如下:
TEST1字段的内容如下:
使用node test.js命令运行文件
C:\Users\xx\Desktop>node test.js
[
e {
_readableState: ReadableState {
state: 6192,
highWaterMark: 16384,
buffer: BufferList { head: null, tail: null, length: 0 },
length: 0,
pipes: [],
flowing: null,
errored: null,
defaultEncoding: 'utf8',
awaitDrainWriters: null,
decoder: null,
encoding: null,
[Symbol(kPaused)]: null
},
_events: [Object: null prototype] {},
_eventsCount: 0,
_maxListeners: undefined,
_writableState: WritableState {
objectMode: false,
highWaterMark: 16384,
finalCalled: false,
needDrain: false,
ending: false,
ended: false,
finished: false,
destroyed: false,
decodeStrings: true,
defaultEncoding: 'utf8',
length: 0,
writing: false,
corked: 0,
sync: true,
bufferProcessing: false,
onwrite: [Function: bound onwrite],
writecb: null,
writelen: 0,
afterWriteTickInfo: null,
buffered: [],
bufferedIndex: 0,
allBuffers: true,
allNoop: true,
pendingcb: 0,
constructed: true,
prefinished: false,
errorEmitted: false,
emitClose: true,
autoDestroy: true,
errored: null,
closed: false,
closeEmitted: false,
[Symbol(kOnFinished)]: []
},
allowHalfOpen: true,
chunkSize: 0,
pieceSize: 0,
iLob: h {
blobId: 3628n,
inRow: true,
groupId: -1,
fileId: -1,
pageNo: -1,
tabId: 5042,
colId: 2,
rowId: 1n,
exGroupId: 0,
exFileId: 0,
exPageNo: 0,
curFileId: -1,
curPageNo: -1,
curPageOffset: 0,
totalOffset: 0,
readOver: false,
local: false,
updateable: true,
length: 14,
compatibleOracle: false,
fetchAll: false,
freed: false,
modify: false,
conn: [e],
lobFlag: 1,
serverEncoding: 'GB18030',
data: 'AAAAAAAAAAAAAA'
},
type: 2017,
rOffset: 1,
wOffset: 1,
[Symbol(kCapture)]: false
}
]
C:\Users\xx\Desktop>
返回的结果是一大段json格式的数据,数据是存放在iLob的data里面,这又是为什么呢?
请教一下这个问题解决了吗,我也遇到了
连接上加个配置可以解决