2011-12-23 3 views
1

私は、可変長のWHERE引数を受け入れることができる1つのクエリに統合したい3つのクエリを持っています。私は私の人生のためにこれをする方法を思い出すことができません。可変パラメータを使用した単純なクエリ

PreparedStatement queryOne = connection.prepareStatement 
("SELECT columnOne, columnTwo, columnThree FROM tableOne WHERE columnOne = ?;"); 

PreparedStatement queryTwo = connection.prepareStatement 
("SELECT columnOne, columnTwo, columnThree FROM tableOne WHERE columnTwo = ?;"); 

PreparedStatement queryThree = connection.prepareStatement 
("SELECT columnOne, columnTwo, columnThree FROM tableOne WHERE columnOne = ? AND columnTwo = ?;"); 
+2

「統合する」とはどういう意味ですか?結果の結合、結果の交差などを返すクエリが必要ですか? –

+0

私は、可変長のWHERE文を受け入れる単一のPreparedStatementを作成したいと考えています。 –

+0

はい、「統合」を意味する場合は、UNIONが役立つかもしれません。 –

答えて

0

はどうか、この上でチャイム気軽に、私自身の質問に答えました悪い習慣であるかどうか。

String columnOne = getValue(); 
String columnTwo = getValue(); 
String queryString = "SELECT columnOne, columnTwo, columnThree FROM tableOne" 

if (columnOne != null && columnTwo != null) 
    queryString = queryString + "WHERE columnOne = ? AND columnTwo = ?" 
else if (columnOne != null) 
    queryString = queryString + "WHERE columnOne = ?" 
else if (columnTwo != null) 
    queryString = queryString + "WHERE columnTwo = ?" 

PreparedStatement query = connection.prepareStatement(queryString); 
1

労働組合は簡単に1つのステートメントで行うことができるように、すべての3つのクエリは、同じテーブルから同じ列を選択:

SELECT columnOne, columnTwo, columnThree 
    FROM tableOne 
WHERE columnOne = ? 
    or columnTwo = ? 
    or (columnOne = ? AND columnTwo = ?) 
+0

私は最初の値にのみ値を割り当てますか?ステートメントは正しく実行されますか? –

+0

@Dennis - いいえ。プレースホルダごとに値を指定する必要があります。 –

+2

は、第1の状態と第2の状態とが重複しているので、 – Jhonathan

関連する問題