0

大まかに言えば、これは些細なことのように思えますが、私は数時間頭を悩ませていたことがわかりました。

状況:

T私は列を持つテーブルを持っていますa,b,c,d,e。列には文字列aが保持され、b,c,d,e各列にはブール値が保持されます。

ユーザーがある種の検索を実行できるようにしています。ここでは、ユーザーに の値を入力するように求め、a,b,c,d,eそれらの値がすべて一致するすべての行を返します。

完璧な世界では、ユーザーはすべての値を入力し(たとえばa="JavaScript"b="true"c="false"d="false"e="true"

connection.createStatement().executeQuery("SELECT * FROM T 
WHERE a = '" + a_input + "' 
and b = " + b_input + "
and c = " + c_input + "
and d = " + d_input + "
and e = " + e_input + ";")

問題:

制約を「緩める」オプションをユーザーに与えるため、a_input=""b_input=""などの可能性があります...潜在的にすべてのフィールドa,b,c,d,eを空にすることができます ( "" ) フィールドが省略された場合、結果の応答に影響を与えるべきではありません。つまり、 が入力されていない場合、結果にはTRUEまたはFALSEcであるエントリが含まれる可能性があります。c

質問:

潜在的にすべてのフィールドが空になるか、一部だけになるか、まったく空になる可能性がある状況をカバーする 1 つのクエリ作成するにはどうすればよいですか?

4

3 に答える 3

0

DB にはブール値が含まれていますが、parms は文字列であるため、これは注意が必要です。パラメータは常に空白ですか。'正しいか間違っているか'?もしそうなら試してみてください

(B_input=''
 Or (b_input=''true' and b)
   Or (b_input='false' and ((not b)))
于 2016-12-06T18:01:09.957 に答える
0

あなたが使用できる

Select *
from table 
where  a in ('','othervalue','othervalue')
and b in ('','othervalue','morevalues')

など.....これは、各フィールドに or を使用するようなもので、空であっても一致します

于 2016-12-06T14:44:05.633 に答える