注册

nodejs连接达梦查询数据库字段类型为text,clob等大字段对象时返回的结果集出错

return; 2024/04/26 718 3

使用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); } }

数据库表结构如下:
image.png
TEST1字段的内容如下:
image.png
使用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里面,这又是为什么呢?

回答 0
暂无回答
扫一扫
联系客服