2016-03-25 6 views
1

私は、クエリの3種類作りたい:例えば、多目的結果のための単一の方法を行うには?

SELECT * FROM table 
SELECT * FROM table WHERE code IN (...) 
SELECT * FROM table WHERE code IN (...) AND username = 'xxx' 
SELECT * FROM table WHERE username = 'xxx' 

私は文章がパラメータに応じ「場合」を使用してクエリを構築することができます知っているが、私はそれがうまくかないことを確認しないとパラメータに応じ

SELECT * FROM table WHERE code IN(?) AND username = ? 

しかし、別の問題があります、(コード(IN)を?)を回避する方法、またはので、(とユーザー名):私は次のようにPreparedStatementを使用することができますか? MySQLを使用したPreparedStatementでユニークなクエリを構築することが可能あり

if (codes is not null) then 
    query = query + " WHERE code IN(codes)" 

if (username is not null) then 
    query = query + " AND username = ? " 

:私が知っている唯一の方法は次のように文字列連結を使用していますか?

LIKE:

SELECT * FROM table WHERE if (codes is not null) code IN (?) AND if (username is not null) username = 'xxx' 
+1

あなたの正確な問題は何ですか? Javaでクエリを動的に構築できませんか? –

+0

はい、私は、それぞれの方法ごとにメソッドを作成しないために、パラメータに応じてdinamicallyしたいと思います。 –

+0

ここに問題はないと思いますが、あなたは、あなたのJavaコードで '' then'を実行します。いいえ、既存のパラメータに基づいてWHERE文を追加/除外するSQLロジックはありません。 IFやCASEロジックを使ってこのようなことをすることができます。http://stackoverflow.com/questions/87821/sql-if-clause-within-where-clauseしかし、それはおそらくあなたが得るほど近くにあります。 – Squeegy

答えて

0

それはwhere portionに見えるが、ここで '非共通の' 要因です。 Where句の文字列を渡して、それがない場合はnullを渡すことができます。このような何か...

if you want `WHERE`... 
    String WHERE = "code IN (...)" 
    doWork(String WHERE); 

else 
    doWork(null); 

そしてdoWorkは...何かのようになります

private static void doWork(String WHERE) { 
    String st = "SELECT * FROM table "; 
    if(WHERE != null) { 
     st += WHERE; 
    ..... 
} 
関連する問題