解决Springboot + MyBatis框架“Cause: org.springframework.jdbc.CannotGetJdbcConnectionException”问题

目录

1 出错类型一(连接MySQL失败)

2 出错类型二(MySQL密码错误)

3 出错类型三(XXXMapper.xml中SQL语句语法问题)


前言:

最近用 SpringBoot 写项目的时候,写 Dao 层测试利用 MyBatis 访问数据库遇到了 bug ,困扰了一两天,因此记录一下。

1 出错类型一(连接MySQL失败)

### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Access denied for user 'root'@'127.0.0.1' to database 'db_onlineexam'

这个问题巨坑,笔者检查了很多次 XXXMapper.xml 的 sql 语句以及电脑主机的 mysql 密码,确认无误,但一直都报这个错误,在网上查了很多资料,都没有成功解决这个bug。最后笔者重新安装 MySQL ,结果问题解决。。。

MySQL安装传送门:Win10 系统 MySQL && Navicat Premium12 安装教程_navicat安装-CSDN博客

2 出错类型二(MySQL密码错误)

### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

 Bug详情:

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
### The error may exist in file [D:\IdeaProjects\onlineExam\target\classes\mapper\UserMapper.xml]
### The error may involve com.nenusoftware.onlineexam.mapper.UserMapper.selectByName
### The error occurred while executing a query
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

如图所示,报错提示用户 'root'@'localhost' 的密码有误,于是去检查项目中关于数据库密码的配置,发现 password 不是我的主机上 mysql 的密码:

将密码修改为正确密码即可:

3 出错类型三(XXXMapper.xml中SQL语句语法问题)

### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''t_user'

Bug详情:

org.springframework.jdbc.BadSqlGrammarException: 
### Error querying database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''t_user'
        WHERE t_user.username = '45'' at line 2
### The error may exist in file [D:\IdeaProjects\onlineExam\target\classes\mapper\UserMapper.xml]
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT *         FROM 't_user'         WHERE t_user.username = ?
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''t_user'
        WHERE t_user.username = '45'' at line 2
; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''t_user'
        WHERE t_user.username = '45'' at line 2

如图所示,报错提示 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''t_user' WHERE t_user.username = '45'' at line 2 ,这是一个语法错误。

于是去检查相应的查询语句,发现在 UserMapper.xml 中关于查询 t_user 这个表,我多写了一对引号:

去掉这对引号即可,就不会报错:

<select id="selectByName" resultMap="User">
    SELECT *
    FROM t_user
    WHERE t_user.username = #{username}
</select>

测试代码显示查询成功。

 结论:出现语法问题超级坑,需要你仔细地检查 XXXMapper.xml 中相关 sql 语句的语法问题。

  • 18
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 29
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值