Ping MySQL Server с использованием JDBC

Это кажется довольно простым (не для меня)...

Как выполнить ping-сервер mysql с помощью JDBC? я успешно использовал запросы выбора и вставки с JDBC и MySQL, но как пинговать

ТИА

Ответы

Ответ 1

Драйвер JDBC MySQL (Connector/J) предоставляет механизм ping.

Если вы выполняете SQL-запрос с /* ping */, например:

"/* ping */ SELECT 1"

Это приведет к тому, что драйвер отправит пинг на сервер и вернет фальшивый, легкий результат.

(Вы можете найти это достаточно глубоко в Коннектор /J документации, ищите "ping" на этой странице. Прочтите внимательно: этот механизм очень чувствителен к используемому синтаксису. В отличие от большинства SQL, "разбор" маркера "ping" происходит в самом драйвере JDBC на стороне клиента.).

Ответ 2

Я не думаю, что в JDBC APi есть что-то для этого.

Но вы можете просто использовать InetAddress и метод isReachable(), чтобы проверить, существует ли сервер (что по сути является тем, что делает ping).

http://download.oracle.com/javase/6/docs/api/java/net/InetAddress.html#isReachable%28int%29

Edit:
Если вы хотите проверить, работает ли MySQL, а не пинговать сервер, вы можете попытаться открыть сокет на сервере на порту MySQL по умолчанию.

Что-то вроде этого:

InetAddress addr = InetAddress.getByName("your.server.com");
int port = 3306;
SocketAddress sockaddr = new InetSocketAddress(addr, port);
Socket sock = new Socket();
sock.connect(sockaddr, 2000); // open the connection with a 2 seconds timeout

Если connect() не генерирует исключение, то что-то работает на порту 3306.

Если вы хотите убедиться, что это сервер MySQL на этом порту, единственный способ - установить соединение JDBC (но для этого вам нужно действующее имя пользователя/пароль) и запустить инструкцию, например. выражение PING, упомянутое Брайаном.

Ответ 3

Я не знаю, как это сделать в JDBC, вы можете использовать Connection Pooling для проверки вашего соединения так (это context.xml для Tomcat (находится в каталоге META-INF вашего приложения)):

<Resource name="jdbc/My_DS" auth="Container" type="javax.sql.DataSource"
            maxActive="100" maxIdle="30" maxWait="10000"
            username="USERNAME" password="PASSWORD" driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost:3306/MYDB?autoReconnect=true" 
            removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"
            testOnBorrow="true" validationQuery="SELECT 1" />

validationQuery проверяет, успешно ли установлено соединение.