2010-12-16 24 views
9

Recibí este error al intentar compilar el siguiente código. Me gustaría saber qué he hecho mal.Excepción no reportada java.sql.SQLException; debe ser atrapado o declarado para ser arrojado?

 
unreported exception java.sql.SQLException; must be caught or declared to be thrown 
Class.forName(myDriver); 

      ^
private void setupInfo() { 

    Driver driver = new org.gjt.mm.mysql.Driver(); 
    String url = "jdbc:mysql://localhost:3306/test"; 
    String username = "root"; 
    String password = "123456"; 

    String problemFeatureSpecTableName = "ProblemFeatureSpec"; 
    String solutionFeatureSpectTableName = "SolutionFeatureSpec"; 
    String classTableName = "Class"; 
    String extraDataTableName = "ExtraData"; 
    String casebaseTablename = "CaseBase"; 
    String problemTableName = "Problem"; 
    String solutionTableName = "Solution"; 
    String inactiveContextsTableName = "InactiveContext"; 
    String constantsTableName = "Constants"; 
    dbInfo = new DBInfo(new JDBCDriverInfo(driverName, url, username, password),constantsTableName); 
    problemSpecInfo = new FeatureSpecRDBInfo(problemFeatureSpecTableName, classTableName, extraDataTableName); 
    solutionSpecInfo = new FeatureSpecRDBInfo(solutionFeatureSpectTableName, classTableName, extraDataTableName); 
    rdbCasebaseInfo = new RDBCaseBaseInfo(casebaseTablename, solutionTableName, problemTableName, inactiveContextsTableName); 
} 
+3

Está leyendo tutoriales/ejemplos de MySQL JDBC obsoletos. El controlador [MM] (http://mmmysql.sourceforge.net/old-index.html) ha sido asumido por MySQL hace más de 8 años y desde entonces se conoce como [Connector/J] (http: // dev. mysql.com/downloads/connector/j/) con 'com.mysql.jdbc.Driver'. El nombre de clase del controlador MM solo se conserva para compatibilidad con versiones anteriores, pero realmente debería usar 'com.mysql.jdbc.Driver'. Por cierto, su error de compilación no coincide con el código fuente publicado. No está utilizando 'Class # forName()' en ninguna parte de la fuente. Aún más, no arroja 'SQLException' en absoluto. – BalusC

Respuesta

11

o hay que hacer captura la excepción en su método:

public void setupInfo() 
{ 
    try 
    { 
     // call methods that might throw SQLException 
    } 
    catch (SQLException e) 
    { 
     // do something appropriate with the exception, *at least*: 
     e.printStackTrace(); 
    } 
} 

O declaran el método de tirar SQLException:

private void setupInfo() throws SQLException 
{ 
    // call methods that might throw SQLException 
} 
+0

¿Podría agregar una breve explicación de lo que hacen? –

+0

@AnubianNoob es bastante fundamental Java. http://docs.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html –

+0

Sé cómo funciona, pero aclararía la respuesta. EDITAR: Oh, no me di cuenta de esto fue a partir de 2010, lo siento ... –

1

Esta línea de el código arroja una e no capturada Xception:

Driver driver = new org.gjt.mm.mysql.Driver(); 

probar esto:

try { 
    Driver driver = new org.gjt.mm.mysql.Driver(); 
} 
catch (java.sql.SQLException e) { 
    // you may want to do something useful here 
// maybe even throw new RuntimException(); 
} 
2

captura la excepción o tirarlo. Es mejor usar un IDE (Eclipse o Netbeans), que le indicará el error en el momento en que presione enter.

1

Siempre intente obtener ayuda de su IDE. Los IDE a menudo pueden corregir el error automáticamente. Presione alt + enter en IntelliJ IDEA o ctrl + 1 en Eclipse y elija reparar el error.

+0

Lamentablemente (IMO) la corrección típica de este error es atrapar la excepción, imprimir una stacktrace a stderr y continuar como si nada hubiera sucedido. Por lo general, no es lo correcto. –

+0

Por lo general, hay dos opciones: atrapar o lanzar. – Nowaker

Cuestiones relacionadas