#java #mysql
#java #mysql
Вопрос:
В настоящее время я работаю в программе Java с использованием mysql. Я столкнулся с проблемой с этим сообщением:
Сбой канала связи. Последний пакет, успешно полученный с сервера, был получен 174,165,153 миллисекунд назад. Последний пакет, успешно отправленный на сервер, был 4 миллисекунды назад.
Я считаю, что это связано с переменной сеанса ‘wait_timeout’. Мое предположение может быть неверным, поэтому я подтверждаю его здесь. Действительно ли это из-за переменной сеанса ‘wait_timeout’? Означает ли эта ошибка, что мое подключение к базе данных «истекло» в том смысле, что время ожидания сеанса уже истекло? Если да, у меня другая проблема.. Я не могу воспроизвести указанную ошибку..
Это то, что я пытаюсь сделать, чтобы повторить ошибку.
- Установка
wait_timeout
переменной5
, значение которой изначально28800
(8 часов).mysql> set session wait_timeout=5;
- Думая, что моя следующая попытка доступа к базе данных будет применять это, я бы запустил этот код:
Class.forName("com.mysql.jdbc.Driver"); oConnection = DriverManager.getConnection(sUrl,sUser,sPass); System.out.println("Database Connection Established.n"); Thread.sleep(6000); executeSimpleQuery();
executeSimpleQuery()
Функция просто выполняет простуюSELECT * FROM
инструкцию, чтобы проверить, работает ли соединение по-прежнему. По-видимому, если wait_timeout равен всего 5, и я перевел поток в спящий режим на 6 секунд, срок действия соединения истечет, и должна быть выдана ошибка. Но ожидаемого результата не происходит, вместо этого он выполняет запрос.
Что я должен сделать, чтобы повторить ошибку?
Ответ №1:
Вы устанавливаете wait_timeout=5 для текущего сеанса; затем открываете другой сеанс (в приложении Java) и выполняете запрос. Попробуйте установить эту переменную после открытия соединения или установите ее глобально.
Например —
SET @@global.wait_timeout = 15; -- Set global variable
SET @@local.wait_timeout = 25; -- Set session variable
SELECT @@global.wait_timeout, @@local.wait_timeout; -- Check global and session variables
Комментарии:
1. большое вам спасибо за это. хотя я не использовал глобальную настройку wait_timeout, потому что мне нужно обрабатывать подключение за сеанс. еще раз спасибо