org.springframework.jdbc.BadSqlGrammarException: ### Error querying database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 第 6 行: '@P0' 附近有语法错误。 ### The error may involve com.siny.base.mapper.KindyInfoMapper.findKindyInfo-Inline ### The error occurred while setting parameters ### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 第 6 行: '@P0' 附近有语法错误。 ; bad SQL grammar []; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 第 6 行: '@P0' 附近有语法错误。 org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:233) org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:71) org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:346) $Proxy5.selectList(Unknown Source) 分析: 语句编译后#{}是预处理状态
在Java中对数据库查询时经常使用“Select Top ? * From 表名 Where 列名 = ?”的SQL语句,此时的问号是PreparedStatement预编译对象的参数占位符,需要使用setXX()系列方法对其赋值后再执行。
但是,Top后面是不允许使用问号占位符的,此处的错误就是由此引起的。
解决:
语句修改为:select top ${top} * from tb