0

私はデータベース全体でPreparedStatementsを使用してきましたがsetDate(index, data)、このようなDateオブジェクトを使用しても機能しますか?

"SELECT * FROM table WHERE date BETWEEN " + date + " AND " + otherDate

これをテストするために使用できるオンラインツールはありますか?

4

2 に答える 2

1

この機能が機能するとは思わない:

"SELECT * FROM table WHERE date BETWEEN " + date + " AND " + otherDate

Date2つのオブジェクトをいくつかのStringリテラルと連結しようとしているので。DateFormatterをに変換するにはDate、を使用する必要がありますString

に固執し、PreparedStatement文字列/値を連結してSQLステートメントを作成しないようにする必要があります。は、PreparedStatementに対してある程度の保護を提供しますがsql injection、文字列連結メソッドは、SQLインジェクションのリスクにさらされます。

于 2013-01-22T10:11:01.237 に答える
1

日付をデータベースで認識可能な形式でフォーマットするのが最善です。に直接追加すると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に固執します。

于 2013-01-22T10:12:29.243 に答える