sqlserver列名无效调试及解决方法

来源:互联网 发布:网络电影 罪恶片 编辑:程序博客网 时间:2024/06/05 09:09

今天用ssm和做sqlserver查询时报错:列名’D’无效
mapper.java

List<ChangeShipmentWithOrderIdDto> getChangeCancelWithShipmentType(@Param("changeTypeArr") String[] changeTypeArr);

mapper.xml

<select id="getChangeCancelWithShipmentType" resultMap="ChangeCancelResultWithOrderId" >     SELECT CHANGE_ID FROM BC_CHANGE_SHIPMENT WHERE TYPE IN         <foreach collection="changeTypeArr" item="type" open="(" close=")" separator=",">            ${type}        </foreach></select>

然后报错,错误信息为:
org.springframework.jdbc.BadSqlGrammarException: ### Error querying database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 列名 ‘C’ 无效。 ### The error may exist in file [F:\Java\workspace\tangb2c_20170901\tangb2c-app-service\target\classes\mybatis-mapping\change\mapper\ChangeQueryMapper.xml] ### The error may involve defaultParameterMap ### The error occurred while setting parameters ### SQL: SELECT CHANGE_ID FROM BC_CHANGE_SHIPMENT WHERE TYPE IN ( W , D , C ) ### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 列名 ‘C’ 无效。 ; bad SQL grammar []; nested exception is
从报错信息可以看出本来应该是?,?,?这样的参数,但是这里直接打印出来了,而且没有引号,所以sqlserver认为是个列名,调试的时候可以把sql语句放到navicate中,错误信息会更全面,在认真检查是xml中用了${type},正确应该是#{type}

原创粉丝点击