¿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.
| |||
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.
__________________ -----,-----,-----,@ |
| |||
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. |
| |||
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.
__________________ -----,-----,-----,@ |
| |||
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. |
| |||
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.
__________________ -----,-----,-----,@ |
| |||
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. |
| |||
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.
__________________ -----,-----,-----,@ |
| |||
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.
__________________ -----,-----,-----,@ |
| |||
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. |
| |||
¿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.
__________________ -----,-----,-----,@ |