0

スタンドアロンの Java アプリケーションから mysql データベースに接続しています。私のアプリケーションは、データベースから選択されるデータを決定するいくつかのフィルターを使用します。

場合によっては、「WHERE」パラメーターが無視され、代わりに db からすべての値が選択されるような方法で select コマンドを作成したいと思います。

これは私の例です:

String query = "SELECT * from messages WHERE type='" + type + "' ORDER BY id DESC";

変数のには、データベース内の項目の Varchar と一致する特定の型を含めることができます。ただし、ユーザーはタイプを「すべての値」(またはそのようなもの、これが十分に明確であることを願っています)に設定できます。その場合、クエリはdbからすべての値を選択します(whereパラメーターは無視されます)。

コードに if ステートメントをいくつか入れて、すべての分岐で別の選択コマンドを呼び出すだけでこれを実行できることはわかっていますが、複数の仕様 (WHERE パラメーター内の属性) が使用されている場合、これは非常に効果的ではありません。

例えば:

String query = "SELECT * from messages WHERE type='" + type + "' AND time='" + time + "'  ORDER BY id DESC";

これが可能かどうかはわかりません。そうでない場合は、ばかげた質問で申し訳ありません...よろしくお願いします!

4

3 に答える 3

2

やりたいことをするためにSQLでは何もせず、コードでそれを行う必要があると思います。通常、人々は Hibernate のような ORM を使用し、文字列連結を使用する代わりに (SQL インジェクションを回避するために) より安全な方法でクエリを作成します。

これは Hibernate での方法です: http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querycriteria.html#querycriteria-narrowing

于 2013-04-26T10:11:41.773 に答える