Ошибка SQLException при соединении с Java - PullRequest
0 голосов
/ 24 июня 2018

Я столкнулся с простой ошибкой подключения к 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 голосов
/ 24 июня 2018

Ваша закомментированная строка подключения предполагает, что вы подключаетесь к именованному экземпляру.Экземпляр SQL Server по умолчанию (без имени) прослушивает порт 1433, если не указано иное.Именованный экземпляр использует динамический порт, который не является 1433, если не настроено иначе.На каждом компьютере может быть только один экземпляр по умолчанию, и каждый экземпляр SQL должен прослушивать другой порт.

Вы можете определить порт, который прослушивает экземпляр SQL, с помощью Диспетчер конфигурации SQL Server илипросмотр журнала ошибок SQL Server.Журнал ошибок будет содержать сообщения для каждого интерфейса и порта, который прослушивает SQL Server.Сообщение будет выглядеть как «Сервер прослушивает ['any' 1433]».Порт можно изменить с помощью SSCM, и он будет действовать после перезапуска службы SQL.

Для проверки подключения к порту вы можете использовать TELNET:

TELNET YourServer 1433

Вы увидите и опустошитеокно, если соединение успешно, в противном случае и ошибка.

Если у вас не установлен TELNET, вы можете проверить подключение порта с помощью этой команды Powershell из окна командной строки:

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

Вы увидите сообщение об успехепри успешном подключении, в противном случае исключение сокета.

Обратите внимание, что динамический порт назначается во время установки, и экземпляр будет пытаться использовать один и тот же порт при каждом запуске.Однако следует помнить, что номер порта может измениться, если этот порт недоступен при запуске.Можно настроить статический порт (включая порт 1433), используя SSCM, чтобы избежать изменения номера порта именованного экземпляра.

...