You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hibernate连接SQL Server数据库失败问题求助

问题分析与解决方案

核心问题梳理

你遇到的问题分两个明确阶段:

  1. 第一阶段:无法加载SQL Server驱动类 com.microsoft.sqlserver.jdbc.SQLServerDriver
  2. 第二阶段:TCP连接被拒绝,无法连接SQL Server的1433端口

阶段一:驱动类找不到的解决方法

你的pom.xml中错误引入了MySQL驱动,但实际要连接的是SQL Server,这是根本错误:

  1. 移除MySQL驱动依赖:
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.28</version>
</dependency>
  1. 添加适配JDK11的SQL Server驱动依赖:
<dependency>
  <groupId>com.microsoft.sqlserver</groupId>
  <artifactId>mssql-jdbc</artifactId>
  <version>12.4.2.jre11</version>
</dependency>

阶段二:连接SQL Server被拒绝的解决方法

驱动问题修复后出现连接拒绝,是因为Hibernate配置与SQL Server实际设置不匹配:

1. 修正JDBC URL格式

你的URL使用了MySQL的格式jdbc:mysql://localhost:3306/itstep,SQL Server的正确URL格式为:

hibernateProps.put(Environment.URL, "jdbc:sqlserver://localhost:1433;databaseName=itstep;encrypt=false");

若你的SQL Server是命名实例(如localhost\SQLEXPRESS),需改为:
jdbc:sqlserver://localhost\SQLEXPRESS;databaseName=itstep;encrypt=false

2. 检查SQL Server TCP/IP配置

  • 打开SQL Server配置管理器,找到SQL Server网络配置 -> 对应实例的协议
  • 确保TCP/IP协议已启用
  • 双击TCP/IP,在IP地址标签页,确认IPAll的TCP端口为1433(若端口修改过,需同步到URL中)
  • 重启SQL Server服务使配置生效

3. 检查防火墙设置

确保Windows防火墙允许1433端口的入站连接,或临时关闭防火墙做测试(生产环境不推荐)

4. 验证SQL Server登录权限

  • 确认sa账号已启用,且配置中填写的密码与实际一致(你的配置中PASS为空,需确保sa密码确实为空)
  • 在SQL Server Management Studio中用sa账号登录,验证能否正常访问itstep数据库

额外实体类问题(提前规避)

你的Color实体类中,List<String>和Map<String,Integer>直接用@Column标注会报错,SQL Server不支持直接映射集合类型字段,需修改为:

@Entity
@Data
@Table(name="color")
@NoArgsConstructor
public class Color implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ElementCollection
    @CollectionTable(name = "color_colors", joinColumns = @JoinColumn(name = "color_id"))
    @Column(name = "color_name")
    private List<String> colors;

    @Column
    private boolean primary;

    @ElementCollection
    @CollectionTable(name = "color_rgb", joinColumns = @JoinColumn(name = "color_id"))
    @MapKeyColumn(name = "rgb_key")
    @Column(name = "rgb_value")
    private Map<String,Integer> rgb = new HashMap<>();

    public Color(List<String> colors, boolean primary, Map<String, Integer> rgb) {
        this.colors = colors;
        this.primary = primary;
        this.rgb = rgb;
    }
}

内容的提问来源于stack exchange,提问作者Максим

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:29:58