如何使用nodejs在IBM Db2的LIKE查询中传递参数?
Posted
技术标签:
【中文标题】如何使用nodejs在IBM Db2的LIKE查询中传递参数?【英文标题】:How to pass parameter in LIKE query of IBM Db2 with nodejs? 【发布时间】: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
【问题讨论】:
你的意思是你需要转义单引号?'\'%?%\''
?
【参考方案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)) || \'%\'
。以上是关于如何使用nodejs在IBM Db2的LIKE查询中传递参数?的主要内容,如果未能解决你的问题,请参考以下文章