0

クエリで使用する必要がある変数が必要なワークライトで SQL アダプターを使用しています。

私はここを読み、同じことに従いました。しかし、それは以下のエラーを示しています。

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

2 に答える 2

2

SQL アダプターで $[variable_name] 構文を使用したことはありません。私はいつも「?」を使ってきました。

"UPDATE devices SET DeviceQuantity=? WHERE DeviceNames = 'DellTestLap';"

ただし、この構文が機能すると仮定すると、コードはどのように「count」という名前を参照していますか? 変数 "count" は、数 2 として解決されます。SQL ステートメントは、変数名だけでは名前 count を参照することを知ることができません。パラメータに渡される変数が次のようなものであれば、より意味があります。

return WL.Server.invokeSQLStatement({
        preparedStatement :DeviceDetails,
        parameters : [{ count: 2 }]
    });

そうは言っても、私はこれまでこの構文を使用したことがなく、単に "?" を使用しています。構文。

于 2013-09-18T14:50:20.257 に答える
1

? の構文も使用できます。

var DeviceDetails  = WL.Server.createSQLStatement("UPDATE devices SET DeviceQuantity=? WHERE DeviceNames ='DellTestLap';");

これは確かに動作します!!!!!!!!!!!!!

于 2013-12-19T05:09:51.763 に答える