WSO2 DSS 更新语句参数 com.microsoft.sqlserver.jdbc.SQLServerException:':' 附近的语法不正确

WSO2 DSS Update Statement Parameter com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near ':'

我正在 WSO2 DSS 中执行以下 SQL 更新语句

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>

有人知道它可能是什么吗?

在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);

我试过了,因为我的一个同事现在也有这个问题。看来问题是因为语句中的回车returns(回车)引起的。

这样试试,不带任何回车returns:

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

这对我有用。

JC