1

たとえば、私が持っている場合:

connection.prepareStatement("SELECT * FROM users 
                                   WHERE status=? AND otherAttribute=?");

特定のステータスが必要な場合もあれば、すべてのステータスが必要な場合もあります。基本的に次のようなことを行うにはどうすればよいですか。

preparedStatement.setInt(1, mySpecificRequestedStatus);

およびその他の場合:

preparedStatement.setInt(1, allStatuses); // wildcard

そのため、特に順列が高くなる可能性があるSELECTステートメントのより複雑なWHERE句の場合は、複数のPreparedStatementsを用意する必要はありません。

4

3 に答える 3

1

あなたはこのようにそれを行うことができます:

connection.prepareStatement("SELECT * FROM users 
                               WHERE (status=? OR ?=1) AND otherAttribute=?");

2つ目?は、「すべてのステータス」属性用です1。ステータスを無視する場合は、に設定します。status特定のものを考慮したい場合は、ゼロに設定してください。

于 2012-07-16T01:53:52.880 に答える
1

選択の余地はありません。私が最初に疑って尋ねたように、どちらかを選択する必要があります。

次のいずれかを実行できます。

  1. if句を使用して複雑なプリペアドステートメントを作成します
  2. 最高のパフォーマンスを持たない複雑なSQLステートメントを作成する

これに対する良い解決策は本当にありません。これが、これを抽象化するためにORMが存在する理由です。問題は、ORMが他のものを単純化する代わりに他の問題/複雑さを導入することです。

于 2012-07-23T16:23:12.767 に答える
0

ステファン・グルニエ、

データベースにを作成してからfunction or procedure呼び出してみませんか?これは多くの面倒を解決し、Javaコードをきちんと保ち、もちろんSQLクエリのハードコーディングをしません。function or procedurejava

よろしく

于 2012-07-25T11:07:32.260 に答える