IBM Worklight - 在SQL Adapter查询中使用变量时出错

时间:2013-09-18 11:50:25

标签: sql ibm-mobilefirst worklight-adapters

我在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]
    });
}

2 个答案:

答案 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';");

这肯定会尝试!!!!!!!!!!!!!