2

isValid(int)from java.sql.Connection(インターフェース)のドキュメント:

http://java.sun.com/javase/6/docs/api/java/sql/Connection.html#isV​​alid(int)

SQLException「提供された値timeoutが 0 未満の場合」をスローすると述べています。

実装者はこれを「提供された値が 0 未満のSQLException 場合にのみ」と読むべきですか、timeoutそれとも他の多くの理由で自由に投げることができますか?

編集:なぜ彼らがIllegalArgumentException. SQLException「この議論が何であるかについて基本的な誤解をしている」ではなく、「データベースが溶けたように見える」などのことを意味すると思います。

4

7 に答える 7

3

私はそれを「if and only if」とは読みません(おそらくそうですが)。timeoutが 0 未満の場合、必ず例外がスローされますが、それ以外の場合は例外がスローされないというわけではありません。開発者は「if and only if」として読むことを意図していたと思いますが、私は推測しているだけなので、確かなことはわかりません.

于 2009-07-16T14:48:33.190 に答える
2

このメソッドは、タイムアウトが 0 未満かどうかをチェックします。そうである場合は、例外をスローします。ただし、アルゴリズムの実行中に意図しない例外をスローする可能性は依然としてあります。

オーバーライドする場合は、実装が異なるだけで、スーパークラスとして pbehave する必要があります。多形性のため、サブクラスをインスタンス化できますが、スーパークラスとして参照されます。したがって、スーパークラスが文書化していない理由で例外をスローすると、混乱を招き、潜在的にバグのあるコードしか作成できなくなります。

于 2009-07-16T14:48:36.747 に答える
1

「タイムアウトに指定された値が0未満の場合」がConnection isValidスローされる唯一のケースであると想定するのはかなり安全だと思いSQLExceptionますが、すべてのクラスとすべてのメソッドについて一般的に文書化されていると想定するのは安全ではないと思いますthrows 条件は、例外がスローされる唯一の条件です。

于 2009-07-16T14:56:33.457 に答える
0

JDBC に対するあなたの不満はよくわかります。JDBC チームは、Java SE プラットフォームの他の部分で確立された規則に準拠する必要があるとは考えていなかったようです。

これは過去に私に多くの混乱を引き起こしました.例えば、あなたが指摘したように、彼らの例外処理は可能な限り標準的ではありません. また、SQLException が実行時例外であることを望みます (または、少なくともデータベース関連の例外階層に、1 つがチェックされ、もう 1 つがチェックされないようにする必要があります)。そして最後に、私の最大の不満は、JDBC のインデックスが 1 であるということです。Java の残りの部分では通常 0 のインデックスが付けられます。

この場合、おそらく「もしそうなら」と仮定するのは正しいと思います。とはいえ、独自のドライバーを実装しようとしていますか? もしそうなら、他にどのような例外条件が予想されますか?

于 2009-07-16T15:20:17.667 に答える
0

はい、タイムアウト値が 0 未満の場合にのみ、例外をスローする必要があります。

接続に問題がある場合、メソッドはfalseを返す必要があります。

于 2009-07-16T15:23:26.880 に答える
0

私はそれをあなたの以前の解釈として解釈します(「もしあれば」)。他の理由による SQLException は、呼び出し元にとって役に立たないと思います。isValid 呼び出しが他の理由で失敗した場合は、"false" の応答が最も適切と思われます。

于 2009-07-16T14:50:25.573 に答える