天天看點

【問題解決】MyBatis分頁查詢SQL Server2008時出現'@P0' 附近有文法錯誤

MyBatis分頁查詢SQL Server2008時出現’@P0’ 附近有文法錯誤”

Error querying database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: ‘@P0’ 附近有文法錯誤。

錯誤如下:

出錯代碼的MyBatis中查詢語句為:

其實這是因為top後面不能跟占位符’?’号的原因,可以看調試的sql語句,mybatis為了防止注入,會先使用?号占位符。

錯誤解釋如下:

在Java中對資料庫查詢時經常使用“Select Top ? * From 表名 Where 列名 = ?”的SQL語句,此時的問号是PreparedStatement預編譯對象的參數占位符,需要使用setXX()系列方法對其指派後再執行。但是,Top後面是不允許使用問号占位符的,此處的錯誤就是由此引起的。

解決方法:

使用<code>$</code>代替#,使用#傳入參數是,sql語句解析是會加上”“,當成字元串來解析,會加入占位符?,再使用setXX()方法後指派再執行,#{}傳參能防止sql注入。

而<code>${}</code>這種方式 是直接傳值!在這裡無法使用占位符的情況下,可以使用<code>$</code>,但是自己寫好防範哦,以免被注入了

歡迎轉載,分享是進步的源泉。