私はデータベース全体でPreparedStatementsを使用してきましたがsetDate(index, data)
、このようなDateオブジェクトを使用しても機能しますか?
"SELECT * FROM table WHERE date BETWEEN " + date + " AND " + otherDate
これをテストするために使用できるオンラインツールはありますか?
この機能が機能するとは思わない:
"SELECT * FROM table WHERE date BETWEEN " + date + " AND " + otherDate
Date
2つのオブジェクトをいくつかのString
リテラルと連結しようとしているので。DateFormatter
をに変換するにはDate
、を使用する必要がありますString
。
に固執し、PreparedStatement
文字列/値を連結してSQLステートメントを作成しないようにする必要があります。は、PreparedStatement
に対してある程度の保護を提供しますがsql injection
、文字列連結メソッドは、SQLインジェクションのリスクにさらされます。
日付をデータベースで認識可能な形式でフォーマットするのが最善です。に直接追加するとString
、日付toString()
が呼び出されます。データベースがその構文をサポートするかどうかは疑わしいので、次のようなことを行う方がよいでしょう。
final SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = "SELECT * FROM table WHERE date BETWEEN '"
+ formatter.format(date) + "' AND " + formatter.format(otherDate) + "'";
また、ケビンが述べたように、PreparedStatement
これはあなたにより多くの保護を提供するので、むしろsに固執します。