Foros del Web » Programación para mayores de 30 ;) » Java »

openConnection ()

Estas en el tema de openConnection () en el foro de Java en Foros del Web. ¿Hay alguna manera de saber si la conexión abierta con openConnection no existe, que no sea a través de excepciones IOException? Muchas gracias....
  #1 (permalink)  
Antiguo 14/04/2004, 13:08
 
Fecha de Ingreso: septiembre-2003
Mensajes: 142
Antigüedad: 21 años, 3 meses
Puntos: 0
openConnection ()

¿Hay alguna manera de saber si la conexión abierta con openConnection no existe, que no sea a través de excepciones IOException?


Muchas gracias.

__________________
-----,-----,-----,@
  #2 (permalink)  
Antiguo 15/04/2004, 06:04
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 21 años, 2 meses
Puntos: 51
Hola,

Que significa que la conexion "no existe"? Que el URL es incorrecto? Que la pagina no existe en esa direccion URL? Que no se puede acceder por GET? Que se requiere autenticación? Que la página se ha movido de sitio?....

Como ves hay muchas condiciones de error diferentes :) y algunos se detectan de una forma y otros de otra. Lo mejor es que te mires el API y veas como se detecta cada uno, desde construir el URL, abrir la conexion a comprobar el estado de la conexion.

Suerte
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #3 (permalink)  
Antiguo 15/04/2004, 09:10
 
Fecha de Ingreso: septiembre-2003
Mensajes: 142
Antigüedad: 21 años, 3 meses
Puntos: 0
Que la página no existe quiere decir que la dirección URL no existe.

Lo que necesito hacer es que si las páginas no existen (su URL) eliminarlas de una base de datos en la que están almacenadas dichas URL, pero sin usar excepciones, porque las variables en los bloques try no son visibles en el catch y no le puedo indicar que si da una excepción me elimine la URL obtenida en el try.

Muchas gracias.

__________________
-----,-----,-----,@
  #4 (permalink)  
Antiguo 16/04/2004, 02:42
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 21 años, 2 meses
Puntos: 51
Hola de nuevo,

Hola, como te mencioné, que la dirección URL no exista (404) es sólo uno de los multiples y variados errores que te pueden dar al acceder a una URL. Que el protocolo no exista o este mal escrito (htp:// o https:// si no tienes soporte SSL), que el host no exista (UnknownHostException) que el URL este anticuado y se haya movido de sitio (Error 301)... que el host no responda (time out) etc

Algunos de estos casos no hay mas remedio que capturarlos como excepciones, asi que hazte a la idea.

Y el problema del try/catch es otro. Si, por supuesto, las variables del try no se ven en el catch... has probado a declararlas antes del try?
Un saludo
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #5 (permalink)  
Antiguo 18/04/2004, 13:09
 
Fecha de Ingreso: septiembre-2003
Mensajes: 142
Antigüedad: 21 años, 3 meses
Puntos: 0
Mira te mando el código que tengo hecho, porque tengo las variables declaradas antes del try, pero a lo mejor es otra cosa lo que llevo mal.

void Actualizar_actionPerformed(ActionEvent e) {
Statement stmt = null;
ResultSet rs = null;
String s;
try {
stmt = con.createStatement();
rs = stmt.executeQuery("SELECT URL FROM ENLACES");
while (rs.next()){
s = "http://" + rs.getString("URL");
System.out.println(s);
URL miURL = new URL(s);
URLConnection conexion = miURL.openConnection();
if (conexion != null)
{
stmt.addBatch("DELETE FROM ENLACES WHERE URL = '" + rs.getString("URL") + "'");
int[] updateCounts = stmt.executeBatch();
}
}
//Cerrar la conexión
rs.close();
stmt.close();
}
catch (MalformedURLException ex) {//Nueva URL() falla
System.err.println("Error al crear la URL: " + ex.getMessage());
}
catch(SQLException exc) {
System.err.println("Error al ejecutar SQL en Actualización: " + exc.getMessage());
}
catch (IOException ioe) {//openConnection() falla
JOptionPane.showMessageDialog(this, "La Base de Datos se ha actualizado correctamente.",
"Actualización de la base de datos", JOptionPane.INFORMATION_MESSAGE);
}
}

Muchas gracias.
__________________
-----,-----,-----,@
  #6 (permalink)  
Antiguo 19/04/2004, 09:43
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 21 años, 2 meses
Puntos: 51
Hola,

.... no acabo de entender ciertas cosas del código...
.- Inicializas "s" a partir de rs.getString("URL")... pero luego en el update vuelves a leer rs.getString("URL")... no deberías hacerlo. Deberías leer rs.getString("URL") sólo una vez.

.- Utilizas el mismo Statement para hacer el "SELECT" y los "DELETE"... tampoco deberías. Un Statement para cada cosa, y para el delete mejor un PreparedStatement.

.- Si la conexion del URL (conexion) NO es null... entonces borras el URL de la BDD? No deberías borrarlo si es erroneo?

.- Muestras el mensaje de "Actualización correcta" si te da una IOException...?!?!

Creo que deberias pensar lo que realmente quieres que haga tu programa y revisar lo que realmente hace, por que así como está no le encuentro mucho sentido.

Un saludo
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #7 (permalink)  
Antiguo 19/04/2004, 11:05
 
Fecha de Ingreso: septiembre-2003
Mensajes: 142
Antigüedad: 21 años, 3 meses
Puntos: 0
Ok, tienes razón. Pensaré mejor lo que me piden que haga y modificaré lo que me has indicado. Cuando me surga algo ya pregunto otra vez.

Muchas gracias.
__________________
-----,-----,-----,@
  #8 (permalink)  
Antiguo 20/04/2004, 09:11
 
Fecha de Ingreso: septiembre-2003
Mensajes: 142
Antigüedad: 21 años, 3 meses
Puntos: 0
Ya me he aclarado con lo que necesito hacer. Tengo una tabla con direcciones URL y lo que necesito es que al pulsar un botón se acceda a las páginas web que corresponden a dichas URL y las que no existan (den error) las elimine de la base de datos.

De este modo ya he realizado los cambios en el código.


void Actualizar_actionPerformed(ActionEvent e) {
Statement stmt = null;
Statement stmt2 = null;
ResultSet rs = null;
String s;
try {
stmt = con.createStatement();
rs = stmt.executeQuery("SELECT URL FROM ENLACES");
while (rs.next()){
s = rs.getString("URL");
URL miURL = new URL(s);
System.out.println(miURL);
URLConnection conexion = miURL.openConnection();
if (conexion == null){
stmt2 = con.createStatement();
stmt2.executeUpdate("DELETE FROM ENLACES WHERE URL = '" + miURL + "'");
}
}
//Cerrar la conexión
rs.close();
stmt.close();
}
catch (MalformedURLException ex) {//Nueva URL() falla
System.err.println("Error al crear la URL: " + ex.getMessage());
}
catch(SQLException exc) {
System.err.println("Error al ejecutar SQL en Actualización: " + exc.getMessage());
}
catch (IOException ioe) { //openConnection() falla
System.err.println("Error al abrir la conexión: " + ioe.getMessage());
}
}


Muchas gracias.
__________________
-----,-----,-----,@
  #9 (permalink)  
Antiguo 20/04/2004, 09:55
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 21 años, 2 meses
Puntos: 51
Hola,

No es por ser quisquilloso, pero ese codigo no funciona, por múltiples y variados motivos.
Entre ellos:
.- El control de errores de abrir UNA conexion esta FUERA del bucle while, con lo que UN error acaba la ejecución.
.- Sólo se borra un URL si la conexion es igual a null, cuando es probablemente un error que no se cumplirá NUNCA.
...
y otros detalles como que...
.- stmt2 no se cierra.
.- La conexion URL (conexion) no se cierra, ni se comprueba que codigo de respuesta devuelve.
.- La conexion SQL (con) no se cierra ni se devuelve, ni siquiera en caso de error SQL
...
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #10 (permalink)  
Antiguo 20/04/2004, 10:01
 
Fecha de Ingreso: septiembre-2003
Mensajes: 142
Antigüedad: 21 años, 3 meses
Puntos: 0
¿Entonces cómo he de hacerlo? Por más que busco no encuentro otra cosa. ¿Hay alguna página dónde encuentre información del tema?

Muchas gracias.
__________________
-----,-----,-----,@
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:47.