0

複数の結合を含む sql ステートメントがあります。結合の結果としてレコードがある場合とそうでない場合があります。結合が空の場合、エラーにはなりません。

結果セットに結果の列が見つからない場合に発生する例外をトラップせずに、特定の結合が空かどうかをテストする方法はありますか?

つまり、JDBC を使用して、次の SQL ステートメントを実行するとします。

select * from AA left outer join BB on AA.keyField = BB.keyField
  where keyField = "123"

例外をトラップすることなく、その結合でフィールドが見つかったかどうかを知りたいです。次に、Java ステートメントを実行すると、次のようになります。

String valueString = rs.getString("BB.keyField");

例外があります。rs.getString("BB.keyField") を null と比較することはできません。結合で値が見つからない場合、getString は例外をスローするためです。

これにより質問がより明確になることを願っています。そもそもこれ以上詳しく説明しなかったことをお詫びします。

4

1 に答える 1

2

クエリは、そのような名前の列を返しません。列の単純な名前 ( 、 など) を使用するだけnameですkeyField。データベース クエリ ツール内でクエリを実行すると、取得した列に割り当てられている名前が表示されます。

絶対に実行しないでくださいselect *。常に特定の列を選択してください。また、2 つの列に同じ名前がある場合は、列にエイリアスを割り当てる必要があります。

select AA.id as aId, AA.name as aName, BB.id as bId, BB.name as bName from ...

そして、あなたは安全に使用することができます

rs.getString("aId");
rs.getString("bName");
...

また、スローされた例外にはメッセージが含まれており、問題の特定に役立ちます。それを読んで。そして、わからなければ投稿してください。

于 2012-06-11T19:07:08.310 に答える