nodejs teradata возвращает "nodeJava_java_math_BigDecimal {}" вместо десятичного значения в наборе результатов? - PullRequest
0 голосов
/ 11 мая 2018

Я выполняю простой запрос выбора.код работает нормально, и он возвращает набор результатов, а также показывает все значения столбцов, которые находятся в символьном формате, но показывает "nodeJava_java_math_BigDecimal {}", вставленный в столбцы десятичного формата?

var Teradata = require('node-teradata');  


var config = { 
url: 'jdbc:teradata://abc.com/database=abab', 
 username: '****',   
  password: '****',  
  driver: './jars/',  
  minPoolSize: 1,
    maxPoolSize: 100,   
    keepalive: {   
      interval: 60000,   
      query: 'SELECT 1',   
      enabled: true   
    }     
};   

var teradata = new Teradata(config);

var sql = "select name,QTY from products where id='700018'";

return teradata.read(sql)
  .then(function(response) {
    console.log(response);
  });

результат его печати на консоли:

[{name:'Apple Juice',QTY:nodeJava_java_math_BigDecimal{}}]

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

Вы можете перепечатать свойства возвращаемого объекта с типами JavaScript, с которыми вы будете работать, используя такие методы, как Number([...]) или .toString()

return teradata.read(sql)
    .then(function(response) {
        return response.map(respObj => objExtractor(respObj));
});

function objExtractor(teradataObj) {
    return {
        name: teradataObj.name.toString(),
        QTY: Number(teradataObj.QTY).toFixed(0)
    }
}
0 голосов
/ 17 июля 2018

Цитирование CraZySacX из здесь :

Когда вы возвращаете объект, завернутый в Java, (nodeJava_java_math_BigDecimal), у вас есть доступ ко всем функции, предоставляемые Java API как в синхронном, так и в асинхронном виде.

Например, в Java 7 BigDecimal API есть функция intValue

Что в вашем случае будет:

return teradata.read(sql)
  .then(function(response) {

       response[0].QTY.intValue(function(err, intVal){
           var newQTY = intVal;
           console.log(newQTY);
        }

  });
...