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

error en compilación

Estas en el tema de error en compilación en el foro de Java en Foros del Web. Hola a todos, quería robarles un minuto de su valioso tiempo para preguntarles por un error que aparece al compilar un archivo *.java. Lo que ...
  #1 (permalink)  
Antiguo 29/11/2004, 09:04
 
Fecha de Ingreso: noviembre-2004
Mensajes: 20
Antigüedad: 20 años
Puntos: 0
error en compilación

Hola a todos, quería robarles un minuto de su valioso tiempo para preguntarles por un error que aparece al compilar un archivo *.java. Lo que pasa es que estoy realizando una conección a un servidor con Oracle 8i desde un máquina remota ... el código que tengo es el que sigue:

import java.sql.*;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

public class coneccion {

// Definiendo el origen de los datos del Driver
String driverClass= "oracle.jdbc.driver.OracleDriver";
String sourceURL = "jdbc:oracle:thin:@193.1.1.50:1521:aleph0";
String user = "m505";
String password = "bucat";
String queryString = "SELECT * FROM UCT50.Z35";

public void driverManager() {

Connection con = null;
Statement stmt = null;
ResultSet rset = null;


try {
System.out.print("\n");
System.out.print(" Loading JDBC Driver ... " + driverClass + "\n");
Class.forName(driverClass).newInstance();

System.out.print("Connecting to ... " + sourceURL + "\n");
con = DriverManager.getConnection(sourceURL, user, password);
System.out.print("Connected as ... " + user + "\n");

System.out.print(" Creando Statement ...\n");
stmt = con.createStatement ();

System.out.print(" Abriendo Resultados ...\n");
rset = stmt.executeQuery (queryString);

while (rset.next()) {
System.out.print(" Resultados ...");
}

System.out.print("Cerrando ...\n");
stmt.close();

} catch (SQLException e) {

e.printStackTrace();

if (con != null) {
try {
con.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
}

} finally {

if (con != null) {
try {
System.out.print(" Cerrando todo ... Adios ... \n\n");
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}



El problema es que al compilarlo aparecen los siguientes errores:

[root@prueba proyecto1]# javac coneccion.java
coneccion.java:28: unreported exception java.lang.ClassNotFoundException; must be caught or declared to be thrown
Class.forName(driverClass).newInstance();
^
coneccion.java:28: unreported exception java.lang.InstantiationException; must be caught or declared to be thrown
Class.forName(driverClass).newInstance();
^
2 errors


Podría darme alguien alguna idea de a que se debe este error y como corregirlo?...

Desde ya les agradezco por su tiempo ...

Saludos,
  #2 (permalink)  
Antiguo 29/11/2004, 09:32
 
Fecha de Ingreso: mayo-2004
Mensajes: 75
Antigüedad: 20 años, 6 meses
Puntos: 2
Lo que pasa es que al invocar
Class.forName(driverClass).newInstance();
Puede que se produzca una Exception del tipo ClassNotFoundException, por lo tanto esta sentencia tiene que estar dentro de un bloque try-catch que pueda controlar este tipo de excepcion.

Tú lo tienes puesto dentro de un try-catch (quito lo que no afecta a este error)

public void driverManager() {
....

try {
Class.forName(driverClass).newInstance();
....
} catch (SQLException e) {
...
e.printStackTrace();
...

} finally {
...
}

Pero si te fijas dentro del catch tienes solamente controladas las SQLException

catch (SQLException e)

El problema se soluciona de dos formas:

Cambiar SQLException por Exception (que es la clase base de todas las excepciones)
o bien crear otro catch especifico para tratar el error de que no se haya encontrado la clase del driver de BD.

public void driverManager() {
....

try {
Class.forName(driverClass).newInstance();
....
} catch (SQLException e) {
...
e.printStackTrace();
...
} catch (ClassNotFoundException cnfex) {
...//lo que quieras hacer en caso de que se produzca justo este error
cnfex.printStackTrace();
...

} finally {
...
}
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 22:11.