2011-03-26 13 views
13

Esto parece bastante simple (no para mí) ...Ping MySQL Server Uso de JDBC

¿Cómo se hace ping a un servidor mysql utilizando JDBC? He utilizado con éxito seleccionar e insertar consultas con JDBC y MySQL, pero ¿cómo hacer ping?

TIA

+0

Si no sabes cómo hacerlo, ¿cómo es simple? – Bombe

Respuesta

30

El controlador JDBC de MySQL (Connector/J) proporciona un mecanismo de ping.

Si usted hace una consulta SQL antepuesto con /* ping */ tales como:

"/* ping */ SELECT 1" 

En realidad, esto hará que el controlador envía un ping al servidor y devuelve un falso, de peso ligero, conjunto de resultados.

(Usted puede encontrar esta enterrado bastante profundo en el Connector/J documentation; busque "ping" en esa página Lea con cuidado:.. Este mecanismo es muy sensible a la sintaxis utilizada diferencia de la mayoría de SQL, el "análisis" de el marcador "ping" ocurre en el controlador JDBC del lado del cliente.).

+1

+1. Sería bueno saber qué hace que este "peso ligero" en comparación con un simple 'SELECCIONAR 1'. No pude encontrar nada en esa página que documenta cuánto "más ligero" es el ping –

+0

muchas gracias ...Solo quería saber, ¿no tienes que ingresar un nombre de usuario y la contraseña de ese usuario para hacer ping? Debería haber dicho esto antes ... lo siento ... estoy tratando de hacer ping sin un nombre de usuario y contraseña ... básicamente comprobando si mysql está presente y que la configuración conduce a un servidor mysql ... es decir: puerto 3306 y el anfitrión (estoy usando 127.0.0.1 por ahora) ... gracias de antemano G6 –

+0

Sí. Como está utilizando una función de la base de datos, necesita una conexión, que requiere un inicio de sesión. –

1

No creo que haya nada en la API JDBC para esto.

Pero simplemente puede usar InetAddress y el método isReachable() para comprobar si el servidor está allí (que es esencialmente lo que está haciendo un ping).

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

Editar:
Si desea comprobar si se está ejecutando MySQL en lugar de hacer ping al servidor que podría intentar abrir un socket con el servidor en el puerto por defecto de MySQL.

Algo como esto:

 
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 

Si connect() no lanza una excepción algo que se está ejecutando en el puerto 3306.

Si desea asegurarse de que se trata de un servidor MySQL en ese puerto, la única forma es establecer una conexión JDBC (pero necesita un nombre de usuario/contraseña válidos para eso) y ejecutar una declaración, por ejemplo la declaración PING mencionada por Brian.

+0

Esto no verificará la presencia de db en el host. –

+0

@Piotr Findeisen: Dijo que quería hacer ping al servidor, así que supuse que quería asegurarse de que el servidor en sí sea accesible. –

+0

No sé qué pregunta quiere :) –

1

No sé cómo hacer esto en JDBC puede utilizar la agrupación de conexiones para validar la conexión como tal (Este es el context.xml para Tomcat (que se encuentra en el directorio META-INF de su aplicación)):

<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" /> 

El validationQuery valida si la conexión es exitosa o no.

+1

¿Quizás validationQuery = "/ * ping */SELECT 1" funcionaría mejor? – Suma