2010-12-16 6 views
9

J'ai eu cette erreur en essayant de compiler le code ci-dessous. Je voudrais savoir ce que j'ai mal fait.Exception non signalée java.sql.SQLException; doit être attrapé ou déclaré être jeté?

 
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

Vous lisez des didacticiels/exemples MySQL JDBC obsolètes. Le [MM driver] (http://mmmysql.sourceforge.net/old-index.html) a été repris par MySQL il y a plus de 8 ans et est désormais connu sous le nom de [Connector/J] (http: // dev. mysql.com/downloads/connector/j/) avec 'com.mysql.jdbc.Driver'. Le nom de classe du pilote MM est uniquement conservé pour une compatibilité ascendante, mais vous devriez vraiment utiliser 'com.mysql.jdbc.Driver'. Votre erreur de compilation ne correspond d'ailleurs pas au code source affiché. Vous n'utilisez pas 'Class # forName()' n'importe où dans la source. Plus encore, il ne lance pas SQLException du tout. – BalusC

Répondre

11

Vous avez besoin soit de prises l'exception dans votre méthode:

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

Ou déclare la méthode de jeter SQLException:

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

Pourriez-vous ajouter une courte explication de ce que font ceux-ci? –

+0

@AnubianNoob c'est assez fondamental Java. http://docs.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html –

+0

Je sais comment cela fonctionne, mais cela clarifierait la réponse. EDIT: Oh, je ne savais pas que c'était à partir de 2010, désolé ... –

1

Cette ligne de le code jette un e non pris xception:

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

essayez ceci:

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

Intercepter l'exception ou de le jeter. Mieux vaut utiliser un IDE (Eclipse ou Netbeans), qui vous indiquera l'erreur au moment où vous appuyez sur Entrée.

1

Essayez toujours d'obtenir de l'aide de votre IDE. Les IDE peuvent souvent corriger l'erreur automatiquement. Appuyez sur alt + entrez dans IntelliJ IDEA ou ctrl + 1 dans Eclipse et choisissez de corriger l'erreur.

+0

Malheureusement (IMO) la correction typique pour cette erreur est d'attraper l'exception, imprimer une pile à la stderr et continuer comme si rien ne s'était passé. Ce n'est généralement pas la bonne chose à faire. –

+0

Habituellement, il y a deux options: attraper ou lancer. – Nowaker

Questions connexes