8

ojdbc6-11.2.0.3.0からに移行し、セマンティクスojdbc7-12.1.0.1の変化を観察しました。ResultSet#getDate()以前は、java.sql.Dateで指定されたコントラクトに従って、時、分、秒、およびミリ秒をゼロに設定することで、返された値が「正規化」されていましたjava.sql.Date。これojdbc7はもはや当てはまらずjava.sql.Date、データベースの値に従って時、分、秒、およびミリ秒が設定されます。

のJavadocを見ましたが、ResultSet#getDate()どの動作が正しいかは明示されていません。古い動作は仕様が意図したものであると想定していたでしょう。私は正しいですか?ドライバーのバグに遭遇しましたか?

4

3 に答える 3

11

クラスのドキュメントに記載されているように、これは明らかにバグjava.sql.Dateです

SQL DATE の定義に準拠するには、java.sql.Date インスタンスによってラップされるミリ秒値を、インスタンスが関連付けられている特定のタイム ゾーンで時、分、秒、およびミリ秒をゼロに設定することによって「正規化」する必要があります。 .

于 2013-07-10T14:10:56.987 に答える
0

この問題を 11g データベースで分析したPreparedStatement.setDate(index, java.sql.Date)ところ、shonky Linux ユーザーが言及した の動作を確認できました (ojdbc6-11.2.0.4-g対でテストしましたojdbc7-12.1.0.2)。

新しい動作はおそらく明示的に JDBC 仕様に違反していませんが、 、 、および対応するデータ型 、 、および を持つという概念には確実に適合しjava.sql.Dateませjava.sql.Timeん。java.sql.TimestampTypes.DATETypes.TIMETypes.TIMESTAMP

そのため、「既存の Oracle 顧客の負担を軽減する」という点では、Douglas Surber が説明した決定は理にかなっているかもしれませんが、(DBMS に依存しない) JDBC の観点からは正しくないように思えます。

于 2015-01-22T17:47:23.590 に答える