Ошибка SQLException при соединении с java

Я столкнулся с простой ошибкой подключения к sql, и я устал ее исправлять. Я установил sql server 2014, а затем sql server 2017, добавил правила в брандмауэр и даже отключил брандмауэр. службы перезагружались несколько раз. Зашел в диспетчер конфигурации, включил все, добавил все необходимые jar-файлы, сделал очистку и сборку, выполнил все поиски по этой проблеме в Google, но одна и та же проблема возникает снова и снова. Используемая система: - Windows 10. - Студия управления сервером Sql 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

Прежде чем сдаться, подумал проверить здесь...


person Nitish    schedule 24.06.2018    source источник
comment
Для начала попробуйте TELNET 1433. Если telnet не установлен в Windows, вы можете запустить powershell -Command echo ((new-object Net.Sockets.TcpClient).Client.Connect('localhost', 1433)) 'success'. Именованные экземпляры SQL обычно прослушивают порт, отличный от 1433. См. docs.microsoft.com/en-us/sql/connect/jdbc/.   -  person Dan Guzman    schedule 24.06.2018
comment
Я запустил команду powershell, ниже ошибка. Это не сработало. Исключение вызывает Connect с 2 аргументами: соединение не может быть установлено, поскольку целевая машина активно отказывается от него 127.0.0.1:1433 В строке: 1 char: 1 + echo ((new-object Net.Sockets.TcpClient).Client. Connect('localhost', ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : SocketException   -  person Nitish    schedule 24.06.2018
comment
Это означает, что ни один процесс не прослушивает 1433. Проверьте журнал ошибок SQL Server, чтобы определить номер порта, который служба фактически прослушивает. Сообщение будет выглядеть так, как будто сервер прослушивает [ 'любой' ‹ipv4› 1433].   -  person Dan Guzman    schedule 24.06.2018
comment
Привет, Дэн! Большое спасибо, наконец, это сработало, я проверил номер порта, и он оказался: 53232. Все, что мне нужно было сделать, это изменить номер порта.   -  person Nitish    schedule 24.06.2018
comment
Только вопрос: Почему на 1433 не работало? Это номер порта по умолчанию. для sql сервера..   -  person Nitish    schedule 24.06.2018
comment
Я уточню с ответом в ближайшее время.   -  person Dan Guzman    schedule 24.06.2018


Ответы (1)


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

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

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

TELNET YourServer 1433

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

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

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

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

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

person Dan Guzman    schedule 24.06.2018