mybatis查询报错:your MariaDB server version for the right syntax to u ...

打印 上一主题 下一主题

主题 1852|帖子 1852|积分 5556

场景再现

在使用mybatis查询mysql数据库时,想实现动态的 传 数据库名 ,发现出现了报错,具体报错信息如下:
  1. ### SQL: SELECT * FROM hidbm-vue.`db_sql_explan_info`
  2. ### Cause: java.sql.SQLSyntaxErrorException: 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 '-vue.`db_sql_explan_info`' at line 1
  3. ; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: 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 '-vue.`db_sql_explan_info`' at line 1
复制代码

很希奇,为什么这样写不可以查询?
问题排查

查抄一下mybatis的语句写的是否精确,xml文件如下:
  1. <select id="getAllMagicAssets" parameterType="String" resultType="java.util.Map">
  2.         SELECT * FROM ${dbName}.`db_sql_explan_info`
  3.     </select>
复制代码
此中${dbName}就是动态的数据库名,可能有的同学会问 为什么要使用$而不是#?是因为使用#{dbName},这样传过来的值会带有单引号,会造成语法错误,可以看一下拼接出来的sql是这样的:
  1. SELECT * FROM 'hidbm-vue'.`db_sql_explan_info`
复制代码
下面是执行这条sql的报错信息:

好了,那么问题毕竟出在哪里呢?
办理方案

实在问题照旧出在xml设置文件,一样平常情况下,这种写法是没问题的,
  1. SELECT * FROM ${dbName}.`db_sql_explan_info`
复制代码
但是,假如你遇到的数据库名出现 中横线,好比 hidbm-vue,这个时候,需要将动态的参数用``这个符号引起来,否则会报错的。sql语句要这样写
  1. SELECT * FROM `${dbName}`.`db_sql_explan_info`
复制代码

总结

当使用mybatis查询数据库时,假如你想在sql语句中写上具体的数据库名,此时最好是用``,将数据库名引起来,这样就不会堕落。因为防止数据库名中出现含有 -中横线的情况。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曹旭辉

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表