异常错误-com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host localhost

本文详细介绍了在使用Java的Spring Boot框架结合MyBatis和Druid连接本地SQLServer数据库时遇到的连接问题及解决方案。重点在于正确配置数据库端口、启动服务模式以及检查SQLServer的TCP/IP设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

该问题的原意是:Java通过sqlserver JDBC连接本地sqlserver 数据时无法连接,但是本地数据库打开没有任何问题。
在这里插入图片描述

环境

编号工具
1sqlserver2017
2springBoot
3mybatis
4druid

解决方式

1.项目数据库连接配置

sqlserver:
      username: **
      password: *******
      jdbc-url: jdbc:sqlserver://localhost:1433;DatabaseName=DB
      driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
      type: com.alibaba.druid.pool.DruidDataSource

在项目种进行sqlserver数据库时注意sqlserver数据库的端口号:1433

2.sqlserver配置管理工具配置

位置:开始–>Microsoct SQL Server 2017–>SQL Server 2017配置管理器
在这里插入图片描述
在这里插入图片描述

1.SQL Server网络配置

TCP/IP的状态为已禁用时在右键快捷菜单中启用,开启TCP/IP
在这里插入图片描述
在这里插入图片描述
查看TCP/IP的sqlserver端口,双击TCP/IP即可打开TCP/IP属性

在这里插入图片描述
当端口不为1433时,应修改为1433。

2.SQL Server服务配置

在这里插入图片描述
如果SQL Server(MSSQLSERVER)服务的启动模式为手动时,手动设置为自动模式。然后重新启动该服务。
在这里插入图片描述

该问题主要注意两点:
1.项目中的数据库端口配置
2.sqlserver的TCP/IP的端口和主服务的启动状态

<think>好的,我现在要解决用户遇到的这个Java异常。首先,异常信息显示的是“Access denied for user 'root1'@'localhost'”,这说明数据库连接时用户名或密码错误,或者该用户没有权限访问。用户使用的是MyBatis-Plus的代码生成器,所以问题应该出在数据源配置上。 首先,我需要确认用户的数据源配置是否正确。用户可能配置的用户名是root1,而MySQL中实际并没有这个用户,或者密码错误。这时候需要检查数据库配置文件,比如在GeneratorCodeConfig.java里,检查DataSourceConfig的设置。确保用户名、密码、URL是否正确。比如URL是否正确指向localhost,端口是否正确(默认3306),数据库名是否存在。 接下来,如果确认配置无误,可能需要检查MySQL中的用户权限。用户可能没有创建root1用户,或者root1用户没有从localhost访问的权限。这时候需要用root账户登录MySQL,执行SELECT User, Host FROM mysql.user; 查看是否存在root1@localhost的用户。如果不存在,需要创建用户并授权,比如使用CREATE USER 'root1'@'localhost' IDENTIFIED BY '密码'; 然后GRANT ALL PRIVILEGES ON *.* TO 'root1'@'localhost'; 最后FLUSH PRIVILEGES; 来刷新权限。 另外,可能用户使用了错误的密码。在配置中密码是否正确,是否有特殊字符需要转义。如果密码包含特殊字符,可能需要用引号括起来,或者在JDBC URL中添加参数,比如useSSL=false等。 还有可能MySQL的root用户默认只允许本地socket连接,而不是TCP/IP连接。这时候需要确认连接URL是否正确,比如是否使用了jdbc:mysql://localhost:3306/dbname,或者是否需要使用127.0.0.1代替localhost,或者检查MySQL配置文件(如my.cnf)中的绑定地址是否为0.0.0.0,允许外部连接。 另外,如果MySQL版本较新,可能默认使用了caching_sha2_password认证插件,而旧的JDBC驱动可能不支持。可以尝试更新mysql-connector-java的版本,或者在URL中添加useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true参数。或者将用户认证方式改为mysql_native_password:ALTER USER 'root1'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码'; 此外,防火墙或MySQL服务是否在运行也需要检查。确认MySQL服务已经启动,并且端口3306没有被防火墙阻止。 最后,建议用户测试数据库连接是否成功,可以使用独立的Java程序或数据库工具(如Navicat、MySQL Workbench)来尝试连接,确认用户名密码是否正确,以及权限是否足够。 总结解决步骤:检查配置、确认用户存在、验证密码、检查权限、更新驱动或调整认证方式、测试连接。按照这些步骤逐一排查,应该可以解决问题。</think>### 错误分析及解决步骤 该错误是由于 **MySQL数据库连接被拒绝**,具体原因和解决方法如下: --- #### 一、错误核心原因 1. **用户凭证错误**:用户名 `root1` 或密码不正确。 2. **权限不足**:MySQL未授权用户 `root1@localhost` 访问数据库。 3. **数据库配置问题**:JDBC连接URL、端口或数据库错误--- #### 二、逐步排查方法 ##### 1. **检查数据库连接配置** 在 `GeneratorCodeConfig.java` 中找到数据源配置部分,确认以下参数正确: ```java DataSourceConfig dsc = new DataSourceConfig(); dsc.setUrl("jdbc:mysql://localhost:3306/你的数据库名?useSSL=false&serverTimezone=UTC"); dsc.setUsername("root1"); // 检查用户名是否为root1 dsc.setPassword("你的密码"); // 检查密码是否与MySQL中root1用户的密码一致 dsc.setDriverName("com.mysql.cj.jdbc.Driver"); ``` ##### 2. **验证MySQL用户权限** - **登录MySQL**(以root用户身份): ```bash mysql -u root -p ``` - **查看用户是否存在**: ```sql SELECT User, Host FROM mysql.user WHERE User = 'root1'; ``` - **若不存在**:创建用户并授权: ```sql CREATE USER 'root1'@'localhost' IDENTIFIED BY '你的密码'; GRANT ALL PRIVILEGES ON *.* TO 'root1'@'localhost'; FLUSH PRIVILEGES; ``` - **若存在但密码错误**: ```sql ALTER USER 'root1'@'localhost' IDENTIFIED BY '新密码'; ``` ##### 3. **检查MySQL服务状态** - **确认MySQL服务已启动**: ```bash systemctl status mysql # Linux 或 services.msc # Windows中查看MySQL服务状态 ``` - **测试远程连接性**(可选): ```bash telnet localhost 3306 ``` ##### 4. **解决认证插件冲突** MySQL 8.0+ 默认使用 `caching_sha2_password` 插件,若JDBC驱动版本过低,需调整认证方式: ```sql ALTER USER 'root1'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; ``` ##### 5. **更新JDBC驱动版本** 在 `pom.xml` 中确保使用最新MySQL驱动: ```xml <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> <!-- 使用较新版本 --> </dependency> ``` --- #### 三、附加建议 - **使用数据库工具验证连接**(如Navicat、DBeaver),排除代码配置问题。 - **检查防火墙设置**:确保3306端口开放(仅限本地开发环境)。 --- 通过以上步骤,可系统性解决 `Access denied for user 'root1'@'localhost'` 错误
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值