????????首先判斷自己是在什么情況下報的錯,如果是MyBatis的SQL報錯的話,建議直接點擊目錄跳轉到MyBatis時SQL報錯,避免浪費時間。如果本文能夠對你有所幫助的話,還請在評論區多多支持
目錄
🍻運行SQL語句、SQL文件等報錯
🥂MyBatis時SQL報錯
🍻運行SQL語句、SQL文件等報錯
🍖問題分析
? ? ? ? 一般這種問題都是有兩種可能(如果你的問題不是這兩種,歡迎評論區補充):SQL語法的問題、字段名與SQL的關鍵字沖突
🥩解決方法
可能性一:sql語法
????????先檢查一下你的SQL語法是不是書寫錯誤,尤其是不被注意的小方面,比如說注釋的語法是#而不是//,如果確定SQL語法肯定沒錯的話應該就是下一種可能了
可能性二:字段名
????????SQL報錯的可能有兩種,一個就是上面所說的SQL語法有誤,另一個可能就是你查詢語句的字段名是mysql保留的關鍵字,可以去官這篇博客查看Mysql 關鍵字及保留字,這個問題的話修改表中字段值名即可。
🥂MyBatis時報錯
🥝問題引入
????????想要在MyBatis中完成對指定表的指定字段的指定順序進行排序,這么一看就需要傳三個參數供mapper映射文件接收。于是我寫了一個mapper接口、mapper映射文件動態拼接SQL語句、一個測試類,運行測試類出現以下報錯。
我的代碼
這里因為是MyBatis的多參數SQL,于是在對應的mapper接口中使用@Param注解將多個參數一一對應,否則會報錯
🍉問題解決
可能性一:就是我的問題所在
使用#{?}的方式傳參的話,MyBatis會對其進行預編譯以防SQL注入問題,導致運行的SQL語句中這些傳過來的參數都會加上單引號,就像是這個形式
select * from 'product_info' order by 'p_id' 'desc'
而這種SQL語句的運行是有問題的,我們需要的是不帶單引號的SQL語句。這時我們可以使用${ }的方式傳參,會將傳過來的參數直接拼接到SQL語句上,但是無法避免SQL注入
select * from product_info order by p_id?desc
這樣就可以正常運行了
可能性二:sql語法
????????先檢查一下你的SQL語法是不是書寫錯誤,最簡單的方法就是將你的SQL語句用具體的值替換掉#{ }引用,復制粘貼到Navicat中的查詢中進行運行,看看是否能夠正常運行且是自己想要的結果,如果報錯的話就檢查SQL語法,確保SQL語法沒有錯誤的話可能就是下面的問題
可能性三:字段名
????????Navicat查詢報錯的可能有兩種,一個就是上面所說的SQL語法有誤,另一個可能就是你查詢語句的字段名是mysql保留的關鍵字,可以去官這篇博客查看Mysql 關鍵字及保留字,這個問題的話修改表中字段值名即可,如果還不是的話很抱歉不能幫到你😣
你的問題有沒有得到解決?到下方評論區交流一下吧? ? ?