2010-12-16 18 views
9

Mam ten błąd podczas próby skompilowania poniższego kodu. Chciałbym wiedzieć, co zrobiłem źle.Nierejestrowany wyjątek java.sql.SQLException; musi zostać złapany lub zadeklarowany jako rzucony?

 
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

Czytasz nieaktualne samouczki/przykłady MySQL JDBC. Sterownik [MM] (http://mmmysql.sourceforge.net/old-index.html) został przejęty przez MySQL ponad 8 lat temu i od tego czasu jest znany jako [Connector/J] (http: // dev. mysql.com/downloads/connector/j/) z 'com.mysql.jdbc.Driver'. Nazwa klasy sterownika MM jest zachowywana tylko dla zgodności wstecznej, ale powinieneś naprawdę używać 'com.mysql.jdbc.Driver'. Twój błąd kompilacji nie jest zgodny z opublikowanym kodem źródłowym. Nie używasz 'Class # forName()' w dowolnym miejscu źródła. Co więcej, nie rzuca w ogóle 'wyjątku SQLEx'. – BalusC

Odpowiedz

11

albo trzeba połowu wyjątkiem w swojej metodzie:

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

Albo zadeklarować metodę, która ma rzucić SQLException:

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

Czy możesz dodać krótkie wyjaśnienie tego, co one robią? –

+0

@AnubianNoob to dość podstawowa Java. http://docs.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html –

+0

Wiem, jak to działa, ale dzięki temu odpowiedź byłaby bardziej przejrzysta. EDIT: Oh, nie zdawałem sobie sprawy, że to było od 2010 roku, przepraszam ... –

1

tej linii kod wyrzuca nieprzytomnego e xception:

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

spróbuj tego:

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

połowu wyjątek lub wyrzucić. Lepiej korzystaj z IDE (Eclipse lub Netbeans), które poinformuje Cię o błędzie od momentu naciśnięcia Enter.

1

Zawsze staraj się uzyskać pomoc od swojego IDE. IDE często naprawiają błąd automatycznie. Naciśnij alt + enter w IntelliJ IDEA lub ctrl + 1 w Eclipse i wybierz, aby naprawić błąd.

+0

Niestety (IMO) typową korektą dla tego błędu jest złapanie wyjątku, wydrukowanie stacktrace na stderr i kontynuowanie, jak gdyby nic się nie stało. Zazwyczaj nie jest to właściwe. –

+0

Zazwyczaj są dwie opcje - catch lub throws. – Nowaker

Powiązane problemy