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

无法连接SQL Server,报ClassNotFoundException错误求助

解决Java连接SQL Server时的ClassNotFoundException问题

问题描述

我已经完成了以下操作:

  • 控制面板>管理工具>点击ODBC;
  • 进入用户DSN并点击添加按钮;
  • 选择对应数据库(SQL Server Native Client);
  • 为DSN命名并保存。

通过pom.xml为项目添加了JDBC驱动:

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>6.5.2.jre9-preview</version>
    <scope>test</scope>
</dependency>

随后在Eclipse中执行了以下代码:

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection conn = DriverManager.getConnection("wsyddbd10678,1433","Username", "Password"); 
Statement st = conn.createStatement(); 
String Sql ="select * from miris.dimset where setsk between 5499 and 5510";
ResultSet rs = st.executeQuery(Sql); 
while (rs.next()){ 
    System.out.println(rs.getString("setsk"));
}

但运行时出现错误:

Exception in thread "main" java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver.

解决方案

这个问题的核心原因是你配置的JDBC依赖scope为test,这意味着该依赖只会在测试代码(比如JUnit测试)运行时被加载,而你的主程序(main方法)属于非测试代码,所以无法找到驱动类。另外,新版本的SQL Server JDBC驱动已经不需要显式调用Class.forName()来加载驱动了,DriverManager会自动发现驱动类。

按照以下步骤解决:

  1. 修改pom.xml中的依赖scope
    将<scope>test</scope>移除或者改为<scope>compile</scope>(compile是默认值,可以省略),修改后的依赖如下:

    <dependency>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>mssql-jdbc</artifactId>
        <version>6.5.2.jre9-preview</version>
    </dependency>
    

    修改后,执行mvn clean install或者在Eclipse中右键项目选择Maven > Update Project,确保依赖被正确加载到项目的类路径中。

  2. 优化数据库连接代码(可选但推荐)
    从JDBC 4.0开始,驱动会自动注册到DriverManager,所以可以去掉Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");这一行代码,同时建议完善连接URL的格式,确保参数正确:

    // 去掉Class.forName这一行
    Connection conn = DriverManager.getConnection("jdbc:sqlserver://wsyddbd10678:1433;databaseName=你的数据库名称","Username", "Password"); 
    Statement st = conn.createStatement(); 
    String Sql ="select * from miris.dimset where setsk between 5499 and 5510";
    ResultSet rs = st.executeQuery(Sql); 
    while (rs.next()){ 
        System.out.println(rs.getString("setsk"));
    }
    // 记得添加资源关闭代码,避免连接泄漏
    try {
        if (rs != null) rs.close();
        if (st != null) st.close();
        if (conn != null) conn.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    
  3. 验证Eclipse类路径
    在Eclipse中右键项目 -> Build Path -> Configure Build Path,切换到Libraries标签页,检查Maven Dependencies下是否包含mssql-jdbc-6.5.2.jre9-preview.jar。如果没有,重新执行Maven更新项目操作即可。

额外提示

  • 如果你使用的是JDK 8,建议选择适配JDK 8的驱动版本(比如6.4.0.jre8),6.5.2.jre9-preview是为JDK 9预览版设计的,可能存在兼容性问题。
  • 你之前配置的ODBC DSN并没有在JDBC连接中用到,JDBC是直接通过驱动连接数据库的,和ODBC配置无关,若不需要ODBC相关功能可以忽略那部分配置。

内容的提问来源于stack exchange,提问作者user2522326

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:03:22