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

15,669次阅读
没有评论

共计 1219 个字符,预计需要花费 4 分钟才能阅读完成。

场景再现

在使用 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 查询报错:your MariaDB server version for the right syntax to use near‘-vue.`db_sql_explan_info`‘
很奇怪,为什么这样写不可以查询?

问题排查

检查一下 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 的报错信息:
mybatis 查询报错:your MariaDB server version for the right syntax to use near‘-vue.`db_sql_explan_info`‘

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

解决方案

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

SELECT * FROM ${dbName}.`db_sql_explan_info`

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

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

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

总结

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

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

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-10-23发表,共计1219字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)