Я получаю сообщение об ошибке связи связи, когда я подключаю базу данных mysql из selenium webdriver [duplicate]

К сожалению, вы не можете использовать strcmp из <cstring>, потому что это заголовок C ++, и вы специально сказали, что он предназначен для приложения C. У меня была та же проблема, поэтому мне пришлось написать свою собственную функцию, которая реализует strcmp:

int strcmp(char input[], char check[])
{
    for (int i = 0;; i++)
    {
        if (input[i] == '\0' && check[i] == '\0')
        {
            break;
        }
        else if (input[i] == '\0' && check[i] != '\0')
        {
            return 1;
        }
        else if (input[i] != '\0' && check[i] == '\0')
        {
            return -1;
        }
        else if (input[i] > check[i])
        {
            return 1;
        }
        else if (input[i] < check[i])
        {
            return -1;
        }
        else
        {
            // characters are the same - continue and check next
        }
    }
    return 0;
}

Надеюсь, это вам хорошо.

153
задан Eric Leschinski 23 October 2014 в 14:32
поделиться

26 ответов

Итак, у вас есть

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: сбой связи. java.net.ConnectException: соединение отклонено

Я цитирую из этот ответ , который также содержит пошаговое руководство по MySQL + JDBC:

Если вы получаете SQLException: Connection refused или Connection timed out или специфический для MySQL CommunicationsException: Communications link failure, то это означает, что БД недоступно. Это может иметь одну или несколько из следующих причин:

  1. IP-адрес или имя хоста в URL-адресе JDBC неверен.
  2. Имя хоста в URL-адресе JDBC не распознается локальным DNS-сервером.
  3. Номер порта отсутствует или неверен в URL-адресе JDBC.
  4. Сервер базы данных недоступен.
  5. Сервер БД не принимает соединения TCP / IP.
  6. У сервера БД закончились соединения.
  7. Что-то между Java и БД блокирует соединения, например брандмауэр или прокси.

Чтобы решить ту или иную, выполните следующие советы:

  1. Проверьте и проверьте их с помощью ping.
  2. Обновите DNS или используйте IP-адрес в URL-адрес JDBC.
  3. Проверьте его на основе my.cnf базы данных MySQL.
  4. Запустите БД.
  5. Убедитесь, что mysqld запускается без --skip-networking option.
  6. Перезапустите БД и исправьте свой код соответственно, чтобы он закрывал соединения в finally.
  7. Отключить брандмауэр и / или настроить брандмауэр / прокси, чтобы разрешить / переместите порт.

См. также:

192
ответ дан Community 22 August 2018 в 23:31
поделиться
  • 1
    MAMP / MAMP Pro устанавливает MAMP_skip-networking_MAMP по умолчанию. Вы должны отключить эту строку в my.cfn – Jurik 25 September 2013 в 14:46
  • 2
    Не в этом случае, но ошибка связи также происходит, когда вы используете пул соединений, и соединения закрываются из-за длительного бездействия. Только в этом случае говорится, что «Последний пакет получил некоторое« X », секунды назад & quot; – nikel 19 December 2015 в 10:24
  • 3
    @nikel Не следует, чтобы потоки в пуле соединений сохранялись активными, активируя «выбрать 1». запрос проверки? Почему они могут закрыться из-за длительного бездействия, когда мы установили evictor на более короткие промежутки времени, чем таймаут сервера mysql? – Farhad 2 September 2016 в 08:34
  • 4
    Да, запрос проверки будет исправлять это. Моя точка зрения касалась случая, когда он не установлен & amp; соединения в пуле истекают из-за неактивности – nikel 2 September 2016 в 08:56
  • 5
    Отключение брандмауэра Windows работало для меня. – Hammad Tariq 19 April 2017 в 10:55

То, что для меня решило, делает 2 вещи: 1. Создайте нового пользователя, кроме root, с помощью некоторого пароля, используя следующие команды:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';
FLUSH PRIVILEGES;

2. комментарий IP-адрес на mysqld.conf

, затем подключиться с новым именем пользователя и паролем. он должен работать.

0
ответ дан Abdul Khalid 22 August 2018 в 23:31
поделиться

Если есть какие-либо читатели, которые столкнулись с этой проблемой для доступа к удаленному серверу: убедитесь, что порт открыт

-1
ответ дан aclokay 22 August 2018 в 23:31
поделиться

я решил эту проблему простым способом, который сработал для меня. У меня проблема с семей "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Ошибка связи связи". В моем файле db.properties у меня было это: url: jdbc: mysql: // localhost: 90 / myDB, удалили только URL-адрес порта, в результате чего появился url: jdbc: mysql: // localhost / myDB, и это сработало для меня .

2
ответ дан Dario Castro 22 August 2018 в 23:31
поделиться

Я поймаю это исключение, когда Java из кучи. Если я попытаюсь поместить в ОЗУ множество элементов данных - сначала я поймаю «Сбой связи» и следующий «OutOfMemoryError».

Я зарегистрировал его, и я уменьшаю потребление памяти (удаляю данные 1/2) и все в порядке.

7
ответ дан dreamcrash 22 August 2018 в 23:31
поделиться

Если вы изменили свой порт, вы получите такую ​​ошибку «com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Ошибка связи с каналом связи» Пожалуйста, проверьте номер вашего порта

2
ответ дан Erick G. Hagstrom 22 August 2018 в 23:31
поделиться

Это исключение com.mysql.jdbc.exceptions.jdbc4.CommunicationsException возникает, если соединение с базой данных простаивает в течение длительного времени.

Это незанятое соединение возвращает true на connection.isClosed();, но если мы попытаемся выполнить инструкцию, тогда оно запустит это исключение, поэтому я предлагаю пойти с пулом базы данных.

4
ответ дан Félix Gagnon-Grenier 22 August 2018 в 23:31
поделиться
  • 1
    Это также происходит по другим причинам, таким как «соединение отказано». – user207421 9 May 2018 в 22:09

Я столкнулся с той же проблемой в IntelliJ IDEA.

Чтобы решить проблему подключения, мне пришлось отключить (⌘ + F2 с использованием ключевых привязок по умолчанию на маке) и снова подключиться. Просто нажать «Обновить» было недостаточно.

-3
ответ дан furins 22 August 2018 в 23:31
поделиться

Попробуйте изменить localhost на 127.0.0.1.

Локальный хост будет разрешен ::1. И MySQL не может быть подключен через IPv6 по умолчанию.

И вот вывод telnet localhost 3306:

$ telnet localhost 3306
Trying ::1...

И ответа от сервера MySQL нет.

Конечно, убедитесь, что ваш сервер MySQL запущен.

0
ответ дан Haozhe Xie 22 August 2018 в 23:31
поделиться

У меня была та же проблема, и вот как она была исправлена:

  1. My .jsp вызывал атрибуты, которые я еще не определил в сервлете.
  2. I имел два имени столбца, которые я передавал в объект через ResultSet (getString("columnName")), который не соответствовал именам столбцов в моей базе данных.

Я не совсем уверен, какой из них исправил проблему, но это сработало. Кроме того, убедитесь, что вы создали новые Statement и ResultSet для каждого запроса таблицы.

0
ответ дан Incognito 22 August 2018 в 23:31
поделиться
  • 1
    (1), конечно, не вызывает этой проблемы. – user207421 9 May 2018 в 22:11

Я мог бы лаять неправильное дерево здесь, но ваше исключение, похоже, указывает на то, что ваш сервер MySQL недоступен.

Исключение в потоке «main» com.mysql.jdbc.exceptions .jdbc4.CommunicationsException: сбой связи. Последний пакет, успешно отправленный на сервер, был 0 миллисекунд назад. Драйвер не получил никаких пакетов с сервера. at ...

Что произойдет, если вы попытаетесь (из терминала)

mysql -u username -p

Вам будет предложено ввести пароль, связанный с именем пользователя. После того, как вы дадите правильный пароль, подключился ли клиент mysql?

Возможно, вам придется запустить MySQL из настроек, если нет. Вы также можете запустить его при запуске.

5
ответ дан Karl Walsh 22 August 2018 в 23:31
поделиться
  • 1
    Я использую MAMP для запуска моего сервера MySQL. Это будет проблемой? – Josh K 6 June 2010 в 18:02
  • 2
    Когда я подключаюсь (через Sequel Pro) к своему localhost, я использую правильное имя пользователя / пароль, и он работает нормально. – Josh K 6 June 2010 в 18:03

Он пытался подключиться к более старой версии MySQL («версия», «5.1.73»); когда вы используете новую версию драйвера, вы получаете сообщение об ошибке «com.mysql.cj.jdbc.Driver», даже если вам не нужно указывать, какой из них вы используете:

Загрузка класса com.mysql.jdbc.Driver'. This is deprecated. The new driver class is com.mysql.cj.jdbc.Driver '. Драйвер автоматически регистрируется через SPI, и ручная загрузка класса драйвера вообще не нужна.

Я изменил объявление использовать версию mysql-connector-java версии 5.1.38, а в коде я сохранил файл com.mysql.jdbc.Driver.

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
</dependency>

Все началось, когда я увидел Ankit Jain's ответ

0
ответ дан manatico 22 August 2018 в 23:31
поделиться

Только что испытал это.

Чтобы заставить его работать с помощью: (это можно поместить в статическом блочном intializer)

static{ // would have to be surrounded by try catch
    Class.forName("com.mysql.jdbc.Driver");   // this will load the class Driver
}

Также, получив соединение через:

conn = DriverManager.getConnection(DBURL,<username>,<password>);

вместо указания параметров входа

  Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/projects?user=user1&password=123");

С уважением.

2
ответ дан mel3kings 22 August 2018 в 23:31
поделиться
  • 1
    Статический блок не был необходим с 2007 года, и вы можете указать параметры входа в любом виде. – user207421 20 January 2017 в 22:07

Это случилось со мной, когда я изменил порт mysql с 3306 на 3307 в файлах my.ini и php.ini, но после изменения портов (3307-> 3306) он снова работал отлично.

2
ответ дан MrPencil 22 August 2018 в 23:31
поделиться

У меня такая же проблема часами. Я использую MAMP Server

Вместо использования localhost: [Apache Port] используйте ваш порт MySQL.

Ниже приведен порт MySQL по умолчанию для сервера MAMP.

String url = "jdbc:mysql://localhost:8889/db_name";

Connection conn = DriverManager.getConnection(url, dbUsername, dbPassword);
5
ответ дан Nathan Tuggy 22 August 2018 в 23:31
поделиться
  • 1
    если у вас есть маска перед установкой Mysql, попробуйте этот метод – DAVIS BENNY 15MIS0426 20 July 2018 в 12:35

У меня такая же ошибка, потому что я пытался запустить свою программу без запуска сервера mysql.

После запуска сервера mysql все пошло правильно.

3
ответ дан rs2012 22 August 2018 в 23:31
поделиться

В моем случае, оказалось, что версия mysql-connector-java была высокой.

В моей демонстрации я как-то использую mysql-connector-java следующим образом:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.9</version>
</dependency>

Но в среде разработки я использую это:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.31</version>
</dependency>

И моя версия MySQL была 5.1.48 (да, она устарела, просто для имитации версии продукта). Поэтому я встретил ту же ошибку.

Поскольку причина найдена, решение также найдено. Сопоставьте версию!

2
ответ дан shellbye 22 August 2018 в 23:31
поделиться
  • 1
    Вряд ли. Все эти версии драйверов должны быть обратно совместимы. – user207421 20 January 2017 в 22:10

Возможно, вы не запустили свой Mysql и Apache Server. После того, как я запустил сервер Apache и Mysql из панели управления XAMPP, соединение было успешно установлено.

Удачи!

0
ответ дан shivam gupta 22 August 2018 в 23:31
поделиться

Мой брандмауэр блокировал сообщение 3307, которое прослушивает мой MySQL. Поэтому я изменил порт с 3307 на 3306. Затем я могу успешно подключиться к базе данных.

0
ответ дан sipekmichal.cz 22 August 2018 в 23:31
поделиться

Загрузите MySQL-JDBC-Type-4-Treiber (ig 'mysql-connector-java-5.1.11-bin.jar' из 'mysql-connector-java-5.1.11.zip') в Mysql .

В процессе компиляции и выполнения в вашем пути к классам необходимо задействовать кувшин драйвера.

Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
// edit the jdbc url 
Connection conn = DriverManager.getConnection( "jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName", username, password );
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery( "select * from table" );
3
ответ дан stacker 22 August 2018 в 23:31
поделиться
  • 1
    Нет, дает мне шторм ошибок о том, что я ничего не нашел. Можно ли импортировать это без JAR-файла? – Josh K 6 June 2010 в 07:56
  • 2
    @Josh это работает, вам просто нужно правильно настроить свой путь к классу. (Или скопируйте банку в свой каталог% JAVA_HOME% \ jre \ lib \ ext, но это считается плохой практикой) – stacker 6 June 2010 в 08:15

Более ранние ответы подходят. Но я также хотел бы указать на более общую проблему.

Я столкнулся с подобной проблемой, и причиной было сетевое ограничение моей компании.

То же соединение получало успех, когда я был в любой другой сети.

3
ответ дан user207421 22 August 2018 в 23:31
поделиться

Это может быть простая проблема с jar. Возможно, вы используете старый mysql-connector-java-XXX-bin.jar, который не поддерживается вашей текущей версией mysql. Я использовал mysql-connector-java-5.1.18-bin.jar, поскольку использую mysql 5.5, и эта проблема решена для меня.

4
ответ дан xrcwrn 22 August 2018 в 23:31
поделиться
  • 1
    Да, может быть вероятность несоответствия банок. – Kiran Nunna 17 May 2015 в 14:43
  • 2
    Все эти версии драйверов должны быть совместимы. – user207421 20 January 2017 в 22:12
  • 3
    В последнем обновлении 4/5/18: В настоящее время я использую MySQL Workbench 6.3. Я пришел сюда, чтобы проверить решение, но я нашел его сам по себе, это просто, что ваш сервер MySQL не работает или он остановлен. Я перезапустил свой сервер, он работал как шарм. – Abhishek Ekaanth 5 April 2018 в 16:00
  • 4
    Это «лучшее решение», почему? Какую проблему он решает и как? – user207421 9 May 2018 в 22:09
0
ответ дан m Piroli 5 November 2018 в 21:10
поделиться
0
ответ дан Prakhar Agrawal 5 November 2018 в 21:10
поделиться
3
ответ дан user207421 5 November 2018 в 21:10
поделиться
4
ответ дан xrcwrn 5 November 2018 в 21:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: