2012-03-14 8 views
0

私は書いたDBconnectorクラスを持っています。ここには、それが持つ挿入問合せメソッドを使用するインスタンスがあります。今すぐクエリを無視してください:このSQL例外を回避するにはどうすればよいですか?

ResultSet NewCustomer = db.executeInsert("SELECT s Bookings VALUES (surnameOut,'Nilsen', 'Johan', 'Bakken 2', 'Stavanger')"); 

上記の行に「未処理の例外SQLException」というエラーが発生しています。これは、上記のtry/catch文で囲むか、例外をスローするコードを保持するメソッドを与えることを示唆しています。私はDBconnectorクラスの中からそれを並べ替える何らかの方法があることを期待していましたので、SQLクエリを実行するための小さな単一の行を維持できます。これは可能ですか?ここで

方法executeInsertメソッドのコードです:

public ResultSet executeInsert(String query)throws SQLException { 
     Statement s = null; 
     ResultSet rs = null; 
     try{ 
      s = con.createStatement(); 
      s.executeQuery(query); 
      rs = s.getResultSet(); 
     } 
     catch(SQLException e){} 
     return rs; 
    } 

答えて

5

は私がのために小さな、単一のラインを維持することができるように私は、DBconnectorクラス内からそれを整理するためのいくつかの方法があった期待していましたSQLクエリを実行します。

(あなたが実際に選択し、挿入を実行しようとしているので、例えば)だから、あなたが壊れたクエリを持っているときが起こるために何をしたいありません。 本当には、現在の方法と同じように、ログに記録することなく、失敗を完全に無視したいですか?それはほぼであり、決してのアプローチです。多くの場合、データベースクエリが失敗した場合は、何をしているのかを中断しなければなりません。例外は、要求、ユーザーアクションなど、スタックの上位レベルの「作業単位」にバブルアップする必要があります。 ...もしそうならば、本当にはあなたが起こるしたいものを考えて、それを無視しないでください -

Javaの例外をチェックした理由は、あなたがエラーを処理する方法を考えることに正確ですこのメソッドには、十分なコンテキストがありません(おそらくそうではありません)。例外をバブルアップさせて、呼び出し元に考えるようにしてください。

+0

あなたはそれの外にtry/catchを提唱していますか?これにより、executeInsert内でtry catchが冗長化されますか? – Chucky

+0

@ Chucky:通常、私は非常に少数のtry/catchブロックを終了します - そして、私は間違いなくここにあるものを取り除くか、チェックされた例外をチェックされていないものにラップする*ちょうど*使用します。 –

2

これは(本質的に)古いチェック例外です。何人かの人々がそれを愛している人もいれば、それを嫌う人もいます(here参照)。

私は、チェックされた例外が好きではありません(Skeet @ 415kの評判に反するのは危険ですか?)ので、私はそれに対処する必要があります。 RuntimeExceptionのカスタム作成されたサブクラスとしてエラーをキャッチして再起動します。 RuntimeExceptionsは明示的に処理する必要はありません。

このアプローチは、最も頻繁に使用されるフレームワークの1つであるSpringです。

ただし、RuntimeExceptionsを使用する場合は、その例外が処理される場所をいつか知っていることを確認してください。あなたはそれをあなたのエンドユーザまでずっと行き、厄介なスタックトレースを見せることは決してありません。

+0

私はチェック例外のファンではありません - 私は彼らがかなり使い果たした興味深い実験だと思っています。基本的に私は、エラーに反応する問題を「解決」することは遠いと思っています。 –

0

あなたの質問に答えるために、DBConnectorのメソッドはSQLExceptionをスローします(そうでない場合でも)。 SQLExceptionはチェックされた例外であるため、そのコードを呼び出すコードで処理する必要があります。

このように聞こえるかもしれません。 throws SQLExceptionを削除すると、小さなSQLコードを書くことができます。あなたが効果的ではないかもしれない問題を効果的に無視しているので、他の答えの助言を取るようにしてください。

関連する問題