com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax

  • 在使用FOUND_ROWS() 進行一次查詢出分頁的列表和總條數的過程中,出現如下錯誤。
    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'select FOUND_ROWS() AS TotalCount' at line 10
  • 根據錯誤提示去找到生成的sql語句在數據庫工具Navicat的命令界面執行,語句正確無誤,返回數據正常。
  • 再進一步搜索關於FOUND_ROWS()的相關信息,發現FOUND_ROWS 本身的作用是返回上一條select語句查詢到的總數,加入select SQL_CALC_FOUND_ROWS 可以暫存當前語句執行的結果,且不包含limit。這樣雖然執行了量詞查詢但是隻執行了一次主查詢,分頁查詢效率提高。
  • 後來發現自己mybatis 的mapper裏一個select裏執行了2次查詢,發現問題所在。搜索執行2次查詢,可以看到需要增加如下配置。
    jdbc:mysql://localhost:3306/test?useOldAliasMetadataBehavior=yes&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true

     

  • allowMultiQueries=true 這裏配置允許多次查詢,這樣mysql的鏈接就可以一次執行多次查詢。
  • 可見此屬性默認是關閉狀態。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章