2010-12-16 4 views
9

Ich habe diesen Fehler beim Versuch, den unten stehenden Code zu kompilieren. Ich würde gerne wissen, was ich falsch gemacht habe.Nicht gemeldete Ausnahme java.sql.SQLException; muss gefangen oder für geworfen erklärt werden?

 
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

Sie lesen veraltete MySQL JDBC Tutorials/Beispiele. Der [MM Treiber] (http://mmmysql.sourceforge.net/old-index.html) wurde vor über 8 Jahren von MySQL übernommen und ist seither als [Connector/J] bekannt (http: // dev. mysql.com/downloads/connector/j/) mit 'com.mysql.jdbc.Driver'. Der MM-Treiber-Klassenname wird nur aus Gründen der Abwärtskompatibilität beibehalten, aber Sie sollten wirklich 'com.mysql.jdbc.Driver' verwenden. Dein Übersetzungsfehler stimmt übrigens nicht mit dem geposteten Quellcode überein. Sie verwenden 'Class # forName()' nicht irgendwo in der Quelle. Mehr noch, es wirft überhaupt keine "SQLException". – BalusC

Antwort

11

müssen Sie entweder Fang die Ausnahme in der Methode:

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

Oder erklären die Methode SQLException zu werfen:

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

Könnten Sie eine kurze Erklärung hinzufügen, was diese tun? –

+0

@AnubianNoob ist es ziemlich grundlegende Java. http://docs.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html –

+0

Ich weiß, wie es funktioniert, aber es würde die Antwort klarer machen. EDIT: Oh, ich wusste nicht, dass das von 2010 war, sorry ... –

1

Diese Linie Code wirft ein nicht gefundenes e xception:

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

versuchen Sie dies:

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

fangen die Ausnahme oder es werfen. Verwenden Sie besser eine IDE (Eclipse oder Netbeans), die Ihnen den Fehler in dem Moment mitteilen wird, in dem Sie die Eingabetaste drücken.

1

Versuchen Sie immer, Hilfe von Ihrer IDE zu bekommen. IDEs können den Fehler oft automatisch beheben. Drücken Sie alt + enter in IntelliJ IDEA oder ctrl + 1 in Eclipse und wählen Sie, um den Fehler zu beheben.

+0

Leider (IMO) ist die typische Korrektur für diesen Fehler, die Ausnahme zu fangen, einen Stacktrace zu stderr zu drucken und fortzufahren, als ob nichts passiert wäre. Es ist generell nicht das Richtige. –

+0

Normalerweise gibt es zwei Optionen - Fangen oder Würfen. – Nowaker

Verwandte Themen