无法连接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会自动发现驱动类。
按照以下步骤解决:
修改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,确保依赖被正确加载到项目的类路径中。优化数据库连接代码(可选但推荐)
从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(); }验证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

