К сожалению, вы не можете использовать 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;
}
Надеюсь, это вам хорошо.
Итак, у вас есть
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: сбой связи. java.net.ConnectException: соединение отклонено
blockquote>Я цитирую из этот ответ , который также содержит пошаговое руководство по MySQL + JDBC:
Если вы получаете
SQLException: Connection refused
илиConnection timed out
или специфический для MySQLCommunicationsException: Communications link failure
, то это означает, что БД недоступно. Это может иметь одну или несколько из следующих причин:
- IP-адрес или имя хоста в URL-адресе JDBC неверен.
- Имя хоста в URL-адресе JDBC не распознается локальным DNS-сервером.
- Номер порта отсутствует или неверен в URL-адресе JDBC.
- Сервер базы данных недоступен.
- Сервер БД не принимает соединения TCP / IP.
- У сервера БД закончились соединения.
- Что-то между Java и БД блокирует соединения, например брандмауэр или прокси.
Чтобы решить ту или иную, выполните следующие советы:
blockquote>
- Проверьте и проверьте их с помощью
ping
.- Обновите DNS или используйте IP-адрес в URL-адрес JDBC.
- Проверьте его на основе
my.cnf
базы данных MySQL.- Запустите БД.
- Убедитесь, что mysqld запускается без
--skip-networking option
.- Перезапустите БД и исправьте свой код соответственно, чтобы он закрывал соединения в
finally
.- Отключить брандмауэр и / или настроить брандмауэр / прокси, чтобы разрешить / переместите порт.
См. также:
То, что для меня решило, делает 2 вещи: 1. Создайте нового пользователя, кроме root, с помощью некоторого пароля, используя следующие команды:
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';
FLUSH PRIVILEGES;
2. комментарий IP-адрес на mysqld.conf
, затем подключиться с новым именем пользователя и паролем. он должен работать.
Если есть какие-либо читатели, которые столкнулись с этой проблемой для доступа к удаленному серверу: убедитесь, что порт открыт
я решил эту проблему простым способом, который сработал для меня. У меня проблема с семей "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Ошибка связи связи". В моем файле db.properties у меня было это: url: jdbc: mysql: // localhost: 90 / myDB, удалили только URL-адрес порта, в результате чего появился url: jdbc: mysql: // localhost / myDB, и это сработало для меня .
Я поймаю это исключение, когда Java из кучи. Если я попытаюсь поместить в ОЗУ множество элементов данных - сначала я поймаю «Сбой связи» и следующий «OutOfMemoryError».
Я зарегистрировал его, и я уменьшаю потребление памяти (удаляю данные 1/2) и все в порядке.
Если вы изменили свой порт, вы получите такую ошибку «com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Ошибка связи с каналом связи» Пожалуйста, проверьте номер вашего порта
Это исключение com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
возникает, если соединение с базой данных простаивает в течение длительного времени.
Это незанятое соединение возвращает true на connection.isClosed();
, но если мы попытаемся выполнить инструкцию, тогда оно запустит это исключение, поэтому я предлагаю пойти с пулом базы данных.
Я столкнулся с той же проблемой в IntelliJ IDEA.
Чтобы решить проблему подключения, мне пришлось отключить (⌘ + F2 с использованием ключевых привязок по умолчанию на маке) и снова подключиться. Просто нажать «Обновить» было недостаточно.
Попробуйте изменить localhost
на 127.0.0.1
.
Локальный хост будет разрешен ::1
. И MySQL не может быть подключен через IPv6 по умолчанию.
И вот вывод telnet localhost 3306
:
$ telnet localhost 3306
Trying ::1...
И ответа от сервера MySQL нет.
Конечно, убедитесь, что ваш сервер MySQL запущен.
У меня была та же проблема, и вот как она была исправлена:
ResultSet (getString("columnName"))
, который не соответствовал именам столбцов в моей базе данных. Я не совсем уверен, какой из них исправил проблему, но это сработало. Кроме того, убедитесь, что вы создали новые Statement
и ResultSet
для каждого запроса таблицы.
Я мог бы лаять неправильное дерево здесь, но ваше исключение, похоже, указывает на то, что ваш сервер MySQL недоступен.
Исключение в потоке «main» com.mysql.jdbc.exceptions .jdbc4.CommunicationsException: сбой связи. Последний пакет, успешно отправленный на сервер, был 0 миллисекунд назад. Драйвер не получил никаких пакетов с сервера. at ...
blockquote>Что произойдет, если вы попытаетесь (из терминала)
mysql -u username -p
Вам будет предложено ввести пароль, связанный с именем пользователя. После того, как вы дадите правильный пароль, подключился ли клиент mysql?
Возможно, вам придется запустить MySQL из настроек, если нет. Вы также можете запустить его при запуске.
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 ответ
Только что испытал это.
Чтобы заставить его работать с помощью: (это можно поместить в статическом блочном 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");
С уважением.
Это случилось со мной, когда я изменил порт mysql с 3306 на 3307 в файлах my.ini и php.ini, но после изменения портов (3307-> 3306) он снова работал отлично.
У меня такая же проблема часами. Я использую MAMP Server
Вместо использования localhost: [Apache Port] используйте ваш порт MySQL.
Ниже приведен порт MySQL по умолчанию для сервера MAMP.
String url = "jdbc:mysql://localhost:8889/db_name";
Connection conn = DriverManager.getConnection(url, dbUsername, dbPassword);
У меня такая же ошибка, потому что я пытался запустить свою программу без запуска сервера mysql.
После запуска сервера mysql все пошло правильно.
В моем случае, оказалось, что версия 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 (да, она устарела, просто для имитации версии продукта). Поэтому я встретил ту же ошибку.
Поскольку причина найдена, решение также найдено. Сопоставьте версию!
Возможно, вы не запустили свой Mysql и Apache Server. После того, как я запустил сервер Apache и Mysql из панели управления XAMPP, соединение было успешно установлено.
Удачи!
Мой брандмауэр блокировал сообщение 3307, которое прослушивает мой MySQL. Поэтому я изменил порт с 3307 на 3306. Затем я могу успешно подключиться к базе данных.
Загрузите 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" );
Более ранние ответы подходят. Но я также хотел бы указать на более общую проблему.
Я столкнулся с подобной проблемой, и причиной было сетевое ограничение моей компании.
То же соединение получало успех, когда я был в любой другой сети.
Это может быть простая проблема с jar. Возможно, вы используете старый mysql-connector-java-XXX-bin.jar
, который не поддерживается вашей текущей версией mysql. Я использовал mysql-connector-java-5.1.18-bin.jar
, поскольку использую mysql 5.5
, и эта проблема решена для меня.