今天用ssm和做sqlserver查询时报错:列名’D’无效
mapper.java
ListgetChangeCancelWithShipmentType(@Param("changeTypeArr") String[] changeTypeArr);
mapper.xml
SELECT CHANGE_ID FROM BC_CHANGE_SHIPMENT WHERE TYPE IN
${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}