2013-10-08 4 views
2

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

Я столкнулся с ситуацией, когда мне нужно обнаружить сервер, который отключен, как я это делаю; любая операция, которая пытается заимствовать соединение из пула соединений, проверьте, действительно ли это соединение. Если это не так, и если причина его недействительности заключается в том, что она не смогла подключиться к базе данных, затем запустить change change и уведомить любого абонента об изменении, тогда абонент откроет диалоговое окно, чтобы заблокировать все операции и начать запрос в базу данных каждые 5 секунд, чтобы проверить, вернулась ли она. Надеюсь, я сделал свою ситуацию ясной.

+1

Вы можете попробовать «SELECT 1 = 1» и посмотреть, есть ли у вас что-нибудь. –

+0

Вы должны проверить соответствующий API. –

+0

Вы можете попробовать, что предлагает Питер, но обнаружить причину того, почему сервер БД был недоступен, потому что это может быть сетевая проблема или может быть ошибкой базы данных, не могу сказать –

ответ

2

Лучше бы вы могли использовать библиотеку объединения пулов, которая будет проверять соединение от вашего имени. Во время работы базы данных он автоматически проверяет работоспособность соединения и создает новое соединение, если существующее недействительно.

Для C3P0 библиотеки пула соединений, пожалуйста, проверьте следующий документ:

http://www.mchange.com/projects/c3p0/#configuring_connection_testing

0

Обычно, когда вы пытаетесь использовать устаревшее соединение, например, путем выдачи простого оператора SQL, как было предложен @PeterLawrey, SQLException будет выброшен, содержащий сведения о том, что не так, если они вообще доступны для драйвера. Поймать исключение и проанализировать то, что возвращается его методами getErrorCode() и getSQLState(). Имейте в виду, что, хотя значения SQLSTATE стандартизированы, они не очень гранулированы, а коды ошибок поставщика могут предоставлять дополнительную информацию, но будут отличаться при подключении к различным платформам баз данных.

Смежные вопросы