2010-12-16 2 views
9

以下のコードをコンパイルしようとしているときにこのエラーが発生しました。私は何が間違っているのかを知りたい。報告されていない例外java.sql.SQLException;捕まえられなければならない、または投げられると宣言しなければならない?

 
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

あなたは古いJDBC JDBCチュートリアル/サンプルを読んでいます。 [MMドライバ](http://mmmysql.sourceforge.net/old-index.html)は、8年以上前にMySQLによって引き継がれており、[Connector/J](http:// dev。 mysql.com/downloads/connector/j/)を 'com.mysql.jdbc.Driver'と置き換えてください。 MMドライバクラス名は下位互換性のためにのみ保持されますが、実際には 'com.mysql.jdbc.Driver'を使用してください。あなたのコンパイルエラーは投稿されたソースコードと一致しません。あなたは 'Class#forName()'をソースのどこにも使用していません。さらに、 'SQLException'はまったく投げません。 – BalusC

答えて

11

あなたはあなたの方法でキャッチ例外に必要な以下のいずれか

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

それとも宣言SQLExceptionをスローする方法:

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

これらの機能について簡単に説明してください。 –

+0

@AnubianNoobそれはかなり基本的なJavaです。 http://docs.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html –

+0

私はそれがどのように機能するのか知っていますが、答えがより明確になります。編集:ああ、これは、2010年から、ごめんなさいと気づいていなかった... –

1

のこの行をコードが捕捉されないeをスローするxception:

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

この試してみてください。例外をキャッチしたり、それを投げる

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

を。 IDE(EclipseまたはNetbeans)を使用してください。Enterキーを押すとエラーが表示されます。

1

IDEから常に助けを求めてください。 IDEは自動的にエラーを修正することがよくあります。 Alt + IntelliJ IDEAまたはEclipseのctrl + 1を押して、エラーを修正することを選択します。

+0

残念なことに(IMO)このエラーの典型的な修正は、例外をキャッチし、スタックトレースをstderrに出力し、何も起こらなかったかのように続行することです。一般的には正しいことではありません。 –

+0

通常、キャッチまたはスローの2つのオプションがあります。 – Nowaker

関連する問題