首页 前端知识 mybatis查询报错:your MariaDB server version for the right syntax to use near ‘-vue.`db_sql_explan_info`‘

mybatis查询报错:your MariaDB server version for the right syntax to use near ‘-vue.`db_sql_explan_info`‘

2024-10-17 10:10:46 前端知识 前端哥 901 665 我要收藏

场景再现

在使用mybatis查询mysql数据库时,想实现动态的 传 数据库名 ,发现出现了报错,具体报错信息如下:

### SQL: SELECT * FROM hidbm-vue.`db_sql_explan_info`
### 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
; 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文件如下:

<select id="getAllMagicAssets" parameterType="String" resultType="java.util.Map">
        SELECT * FROM ${dbName}.`db_sql_explan_info`
    </select>

其中${dbName}就是动态的数据库名,可能有的同学会问 为什么要使用$而不是#?是因为使用#{dbName},这样传过来的值会带有单引号,会造成语法错误,可以看一下拼接出来的sql是这样的:

SELECT * FROM 'hidbm-vue'.`db_sql_explan_info`

下面是执行这条sql的报错信息:
在这里插入图片描述

好了,那么问题究竟出在哪里呢?

解决方案

其实问题还是出在xml配置文件,一般情况下,这种写法是没问题的,

SELECT * FROM ${dbName}.`db_sql_explan_info`

但是,如果你遇到的数据库名出现 中横线,比如 hidbm-vue,这个时候,需要将动态的参数用``这个符号引起来,否则会报错的。sql语句要这样写

SELECT * FROM `${dbName}`.`db_sql_explan_info`

在这里插入图片描述

总结

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

转载请注明出处或者链接地址:https://www.qianduange.cn//article/19105.html
评论
发布的文章
大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!