情况1:没有开启TCP/IP连接
com.microsoft.sqlserver.jdbc.SQLServerException: 通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Socket operation on nonsocket: configureBlocking。请验证连接属性。确保 SQL Server 的实例正在主机上运行,且在此端口接受 TCP/IP 连接,还要确保防火墙没有阻止到此端口的 TCP 连接。”。 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:237) at com.microsoft.sqlserver.jdbc.SQLServerException.ConvertConnectExceptionToSQLServerException(SQLServerException.java:288) at com.microsoft.sqlserver.jdbc.SocketFinder.findSocket(IOBuffer.java:2720) at com.microsoft.sqlserver.jdbc.TDSChannel.open(IOBuffer.java:761) .....
解决方法:
搜索SQL SERVER 配置管理器,启用如下图所示的地方即可:
情况二:安全连接不通过
com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target”。 ClientConnectionId:cae7aed5-1127-4c7e-a992-e9f2a379fd94 at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:3680) at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:2113) at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:3204) at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:2833) at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:2671) at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1640) ......
解决方法:
原来的连接url是这样写的:
url: jdbc:sqlserver://localhost:1433;DatabaseName=csr-vwork
需要改成以下两种之一:
url: jdbc:sqlserver://localhost:1433;DatabaseName=csr-vwork;encrypt=false url: jdbc:sqlserver://localhost:1433;DatabaseName=csr-vwork;encrypt=true;trustServerCertificate=true
这个是因为sqlever在jdbc连接的时候需要一定的安全验证,我们跳过或者强制可信即可。