与Java连接时出现SQLException错误

时间:2018-06-24 09:48:46

标签: exception-handling netbeans-8 sql-server-2017

我一直面临着一个简单的sql连接错误,我厌倦了修复它。我先安装了sql server 2014,然后又安装了sql server 2017,将规则添加到防火墙,甚至关闭了防火墙。服务多次重新启动。 去了配置管理器,启用了所有功能,添加了所需的所有jar,完成了清理和构建,在google中就此问题进行了所有搜索,仍然一次又一次出现相同的问题。使用的系统是 -Windows 10。 -SQL Server Management Studio 2017。 -Netbean 8.1

代码:-

    import java.sql.*;
    public class DbConnect  { 
    public static void main(String[] args) throws SQLException,ClassNotFoundException {
    String url = "jdbc:sqlserver://localhost:1433;databaseName=productlist;user=db2017;password=db2017";

//commented :-String url = "jdbc:sqlserver://DESKTOP-7CI6DU0\\NIT2017:1433;databaseName=productlist;user=db2017;password=db2017";

                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
                Connection conn = DriverManager.getConnection(url);
                System.out.println("test");
                Statement sta = conn.createStatement();
                String Sql = "select * from productlist";
                ResultSet rs = sta.executeQuery(Sql);
                while (rs.next()) {
                System.out.println(rs.getString("CatName"));                 
        }  }  }

经过大量的故障排除后,下面再次出现异常错误。

Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host localhost, port 1433 has failed. Error: "Connection refused: connect. Verify the connection properties, check that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port, and that no firewall is blocking TCP connections to the port.".
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:171)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1033)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:817)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:700)
    at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:842)
    at java.sql.DriverManager.getConnection(DriverManager.java:571)
    at java.sql.DriverManager.getConnection(DriverManager.java:233)
    at DbConnect.main(DbConnect.java:11)
C:\Users\Nitish\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1

放弃之前,曾想在这里检查一下...

1 个答案:

答案 0 :(得分:0)

您注释掉的连接字符串表明您正在连接到命名实例。除非另行配置,否则默认的SQL Server实例(未命名)在端口1433上侦听。除非另外配置,否则命名实例使用的动态端口不是1433。每台计算机只能有一个默认实例,每个SQL实例必须在不同的端口上侦听。

您可以使用SQL Server Configuration Manager或查看SQL Server错误日志来确定SQL实例正在侦听的端口。错误日志将包含每个接口和SQL Server正在侦听的端口的消息。该消息将类似于“服务器正在侦听['any'1433]。”。可以使用SSCM更改端口,该端口将在重新启动SQL Service后生效。

要测试端口连接性,可以使用TELNET

TELNET YourServer 1433

如果连接成功,您将看到并清空窗口,否则显示错误。

如果未安装TELNET,则可以从命令提示符窗口中使用此Powershell命令测试端口连接:

powershell -Command echo ((new-object Net.Sockets.TcpClient).Client.Connect('YourServer', 1433)) 'success'

成功连接后,您会看到成功消息,否则会显示套接字异常。

请注意,动态端口是在安装期间分配的,实例将在每次启动时尝试使用相同的端口。但是,请注意,如果该端口在启动时不可用,则端口号可能会更改。可以使用SSCM配置静态端口(包括端口1433),以避免更改命名实例的端口号。