Параметр оператора обновления WSO2 DSS com.microsoft.sqlserver.jdbc.SQLServerException: неправильный синтаксис рядом с ':'

Я выполняю следующую инструкцию обновления SQL в WSO2 DSS

Update Door
Set dcr_messageBox = :msg, dcr_servicesArea = :servArea
Where dcr_regNo = :regNo

Я выставляю этот запрос как службу отдыха. Я продолжаю получать следующую ошибку

Current Request Name: _putdoorproperty
Current Params: {servArea=21, regNo=313, msg=21}
Nested Exception:-
com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near ':'.

</soapenv:Text></soapenv:Reason><soapenv:Detail><axis2ns646:DataServiceFault xmlns:axis2ns646="http://ws.wso2.org/dataservice"><axis2ns646:current_params>{servArea=, regNo=3123, msg=}</axis2ns646:current_params><axis2ns646:current_request_name>_putdoctorproperty</axis2ns646:current_request_name><axis2ns646:nested_exception>com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near ':'.</axis2ns646:nested_exception><axis2ns646:source_data_service>

У кого-нибудь есть идеи, что это может быть?


person Brian    schedule 15.01.2016    source источник
comment
Если :msg, :servArea, :regNo являются переменными, то они должны быть заменены значениями перед выполнением запроса на обновление.   -  person Pரதீப்    schedule 15.01.2016
comment
по какой-то причине кажется, что он прослушивается:   -  person Brian    schedule 15.01.2016


Ответы (2)


Я попробовал это, так как мой коллега также имеет эту проблему прямо сейчас. Кажется, проблема вызвана возвратом каретки (вводом) в операторе.

Попробуйте так, без возврата каретки:

Update Door Set dcr_messageBox = :msg, dcr_servicesArea = :servArea Where dcr_regNo = :regNo

Это сработало для меня.

JC

person cataj    schedule 15.01.2016

В JDBC заполнитель по умолчанию для переменных — ?. Обычное использование именованных параметров, таких как :msg, не поддерживается (автономным JDBC).

Вам нужно будет преобразовать свой запрос в

Update Door
 Set dcr_messageBox = ?, dcr_servicesArea =?
  Where dcr_regNo = ?

а затем выступите на своем PreparedStatement

ps.setInt(1, msg);
ps.setInt(2, servArea);
ps.setInt(3, regNo);
person Jan    schedule 15.01.2016
comment
Это неверно для случая, поскольку я использую WSO2 DSS. - person Brian; 15.01.2016