0

DOWNLOAD_TAB という名前の 1 つのデータベース テーブルに DOWNLOAD_DATE という名前のタイムスタンプ列があります。

Oracle SQL Developerを開いたとき、最大日付は「24.02.12 13:48:39,286000000」でした

select TO_CHAR (MAX(DOWNLOAD_DATE)) from DOWNLOAD_TAB

しかし、上記のクエリは日付を「24.02.12 13:48:39,286」として返しました

ここで、特定の日付以降のすべてのレコードを取得するクエリを作成したいと考えていますが、その日付を java.util.Date で利用できるようにしています。

一部のフレームワークの制約により、Java の PreparedStatement を使用できません。Statement クラスを使用する必要があります。

java.sql.Statement を使用して Java でこれを行う方法を教えてください。

4

1 に答える 1

0

準備されたステートメントを絶対に使用できない場合は、これでうまくいくはずです。必要に応じて日付をフォーマットし、同じフォーマットを使用して SQL ステートメントで TO_DATE を使用します。Oracle にはデフォルトのフォーマットがありますが、私は明示的にフォーマットを指定することを好みます。

Date now = new Date();
String dateString = new SimpleDateFormat("yyyy-MM-dd").format(now);
String sqlVal = "TO_DATE('" + dateString + "', 'yyyyy-mm-dd')";
String sql = "SELECT * FROM DOWNLOAD_TAB WHERE download_date > " + sqlValue;

そのため、準備済みステートメントが常に優先されます。ご覧のとおり、このコードは醜く、エラーが発生しやすく、データベース間での移植性がなく、SQL インジェクション攻撃を受けやすくなっています。そしてもちろん、準備されたステートメントのパフォーマンスは向上します。

于 2012-04-19T18:06:43.957 に答える