Java应用连接Microsoft SQL Server数据库技术求助
首先得揪出你代码里最显眼的错误——驱动类名拼写错了!你写的是:
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerh=Driver");
这明显是手滑打错了,正确的驱动类名应该是:
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
这个拼写错误会直接触发ClassNotFoundException,是你当前最优先要修正的问题。另外,你的第二个catch块里System.out.printl...没写完,记得补全成System.out.println(ex.getMessage());(或者直接打印异常栈轨迹,更方便排错)。
除了代码里的低级错误,我们再梳理下其他可能导致连接失败的常见坑:
JDBC驱动有没有正确引入?
你得确保项目里已经加了Microsoft SQL Server的JDBC驱动(比如mssql-jdbc这个依赖)。如果是Maven项目,要在pom.xml里配置对应的依赖;如果是手动导入jar包,得把驱动jar放到项目的类路径下。没驱动的话,哪怕类名写对了,照样会报类找不到的错误。SQL Server的TCP/IP协议开了吗?
默认情况下,SQL Server可能没开启TCP/IP连接。你打开SQL Server配置管理器,找到「SQL Server网络配置」→「MSSQLSERVER的协议」,确认TCP/IP是启用状态,然后重启SQL Server服务让设置生效。端口1433能不能连通?
1433是SQL Server的默认端口,要确认这个端口没被防火墙挡住,而且SQL Server确实在监听它。你可以用telnet localhost 1433或者PowerShell里的Test-NetConnection localhost -Port 1433测试下端口通不通。集成安全的配置对不对?
你用了integratedSecurity=true,也就是Windows身份验证。这时候要保证运行Java程序的Windows用户有访问JITM数据库的权限;另外如果是64位系统,可能需要把对应版本的sqljdbc_auth.dll放到项目类路径或者系统路径里,不然会抛出「找不到sqljdbc_auth.dll」的错误。数据库名称没写错吧?
确认你的SQL Server里真的存在叫JITM的数据库,注意数据库名称可能区分大小写(取决于SQL Server的排序规则),别手滑打错字。
最后给个小建议:把异常捕获改成打印完整的栈轨迹,比如err.printStackTrace()和ex.printStackTrace(),这样能看到更详细的错误信息,排错效率会高很多。
内容的提问来源于stack exchange,提问作者Aliyu Heidar Umar

