sqlserver mybatis分页, '@P0' 附近有语法错误

来源:互联网 发布:java邮件发送过多 编辑:程序博客网 时间:2024/04/28 23:34
org.springframework.jdbc.BadSqlGrammarException: 
### Error querying database.  Cause: com.microsoft.sqlserver.jdbc.SQLServerException: “@P1”附近有语法错误。
### The error may exist in config/sqlmap/transaction.xml
### The error may involve transaction.findTransactionsByUserId-Inline
### The error occurred while setting parameters
### SQL: SELECT top  10 * FROM TRANSACTIONS T WHERE USERID=?                                                                                     AND ID NOT IN    (     SELECT TOP ? id FROM TRANSACTIONS  WHERE USERID=?                                                                                     order by id    )                   ORDER BY              id asc
### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: “@P1”附近有语法错误。
; bad SQL grammar []; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: “@P1”附近有语法错误。

writing...


解决方案:

解决方法:select top ${pageSize}....

将#改成$就Ok了.


mybatis SQLSERVER '@P1' 附近有语法错误
数据库用SQLSERVER2000,写分页sql,使用mybatis动态传入参数,报如下错误
bad SQL grammar []; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 第 1 行: '@P1' 附近有语法错误。
对SQL出问题的地方做了简化,实际要负责很多,简化后问题SQL语句如下:
SELECT TOP #{num} FROM employee
通过google找到解决办法,只要改成
SELECT TOP ${num} FROM employee   

总结原因如下:
#{var}传入参数会被装饰成 "var"可以防止sql注入问题
比如num=10,上面sql语句就会被解释成SELECT TOP "10" FROM employee 这样就会报错
${var}传入参数会直接显示 会有发生sql注入问题 
同样num=10,上面sql语句就会被解释成SELECT TOP 10 FROM employee 这样就没错  
使用#{var},尽量少用${var} 

0 0
原创粉丝点击