【问题标题】:How to pass parameter in LIKE query of IBM Db2 with nodejs?如何使用nodejs在IBM Db2的LIKE查询中传递参数?
【发布时间】:2021-01-29 08:03:27
【问题描述】:

我正在尝试使用 node.js 12 执行从 ibm db2 到 ibm watson 助手的查询。下面您可以看到我正在使用的代码,它适用于函数 fetchHSCode(),其中从数据库中检索到的值是整数。但是对于 fetchName() 它不起作用,因为值是 varchar 格式。 得到的错误是

SyntaxError: Unexpected token '?'\n

我在编写查询时遇到问题

'SELECT DISTINCT "Commodity", "Commodity_Code" FROM "PKD20375"."TRADES" WHERE "Commodity" LIKE '%?%'; '

请注意,运行查询需要表列和表名之间的双引号 ("")。不使用双引号就不行。

var ibmdb = require('ibm_db');

// Retrieve HS code information
function fetchHSCode(dsn, hscode) {
    try {
        var conn = ibmdb.openSync(dsn);
        var data = conn.querySync('SELECT DISTINCT "Commodity_Code", "Commodity" FROM "PKD20375"."TRADES" WHERE "Commodity_Code"=?;', [hscode]);
        conn.closeSync();

    var resString = "";
    for(let i = 0; i < data.length; i++) {
        resString += data[i]['Commodity'] + "\n";
    }

    // Return both generated string and data
    return {
        result: resString, data: data, input: hscode
    };
} catch (e) {
    return {
        dberror: e
    }
}
}

// Retrieve product from name
function fetchName(dsn, productName) {
    try {
         var conn = ibmdb.openSync(dsn);
         var data = conn.querySync('SELECT DISTINCT "Commodity", "Commodity_Code" FROM "PKD20375"."TRADES" WHERE "Commodity" LIKE '%?%'; ', [productName]);
         conn.closeSync();
         var resString = "";
         for(let i = 0; i < data.length; i++) {
             resString += data[i]['Commodity'] + "\n";
         
     }
     
     // Return both generated string and data
     return {
         result: resString, data: data, input: productName
     };
} catch (e) {
    return {
        dberror: e
    }
}
}

【问题讨论】:

  • 你的意思是你需要转义单引号? '\'%?%\'' ?

标签: node.js database db2


【解决方案1】:

您需要转义单引号,因为您的字符串中有单引号,因此必须将其转义\',如下所示

 var data = conn.querySync('SELECT DISTINCT "Commodity", "Commodity_Code" FROM "PKD20375"."TRADES" WHERE "Commodity" LIKE \'%\' || cast(? as varchar(150)) || \'%\'; ');

在 javascript 中,例如,如果您尝试在单引号字符串的中间使用撇号来分配字符串,例如

const brokenString = 'I'm a broken string';

将获得Uncaught SyntaxError: Unexpected identifie

所以你可以通过使用双引号字符串来解决它

const nonbrokenString = "I'm a broken string";

或使用反斜杠转义单引号

const nonbrokenString = 'I\'m a broken string';

【讨论】:

  • ? 符号在您的示例中不表示参数标记。它在字符串常量内。它应该看起来像 LIKE \'%\' || cast(? as varchar(100)) || \'%\'
猜你喜欢
  • 2018-07-03
  • 1970-01-01
  • 1970-01-01
  • 2021-03-24
  • 1970-01-01
  • 2018-03-14
  • 1970-01-01
  • 1970-01-01
  • 2016-10-19
相关资源
最近更新 更多