我在worklight中使用SQL适配器,我需要在查询中使用它需要的变量。
我阅读here并遵循相同的原则。但它显示以下错误。
在SQL适配器中使用变量时粘贴了完整的错误消息。
[ERROR ] FWLSE0099E: An error occurred while invoking procedure [project Sample]Device/SqlStatementFWLSE0100E: parameters: [project Sample]{
"arr": [
{
"parameters": [
null
],
"preparedStatement": "UPDATE devices SET DeviceQuantity=$[count] WHERE DeviceNames = 'DellTestLap';"
}
]
}
Parameter index out of range (1 > number of parameters, which is 0)..
Performed query:
UPDATE devices SET DeviceQuantity=$[count] WHERE DeviceNames = 'DellTestLap';
FWLSE0101E: Caused by: [project Sample]java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
com.worklight.common.log.filters.ErrorFilter
Project.js
function UpdateDeviceDetails(){
var count = 2;
var invocationData2 = {
adapter : 'Device', // adapter name
procedure : 'UpdateDeviceDetails', // procedure name
parameters : [count]
};
WL.Client.invokeProcedure(invocationData2,{
onSuccess : QuerySuccess,
onFailure : QueryFailure
});
}
Adapter.js
var DeviceDetails = WL.Server.createSQLStatement("UPDATE devices SET DeviceQuantity=$[count] WHERE DeviceNames = 'DellTestLap';");
function UpdateDeviceDetails(count) {
return WL.Server.invokeSQLStatement({
preparedStatement :DeviceDetails,
parameters : [count]
});
}
答案 0 :(得分:2)
我从未在SQL适配器中使用$ [variable_name]语法。我一直用“?”
“UPDATE devices SET DeviceQuantity =?WHERE DeviceNames = 'DellTestLap';“
但是,假设此语法有效,您的代码如何引用名称“count”?变量“count”被解析为数字2.SQL语句将无法仅通过变量名称来引用名称计数。如果传递给参数的变量更像是这样更有意义:
return WL.Server.invokeSQLStatement({
preparedStatement :DeviceDetails,
parameters : [{ count: 2 }]
});
话虽如此,我以前从未使用过这种语法,我只是使用“?”语法。
答案 1 :(得分:1)
您还可以使用?
的语法var DeviceDetails = WL.Server.createSQLStatement("UPDATE devices SET DeviceQuantity=? WHERE DeviceNames ='DellTestLap';");
这肯定会尝试!!!!!!!!!!!!!