2016-03-25 15 views
1

Ben sorguları üç tip yapmak istiyorum: Ben kullanarak sorgu inşa edebilirsiniz biliyorumÇok amaçlı sonuçlar için nasıl tek bir yöntem yapılır?

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

cümleler parametrelerine bağlı olarak, ama, örneğin, iyi ya da olmadığından emin değil 'eğer' Ben böyle bir PreparedStatement kullanabilirsiniz:

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

Ama, nasıl önlemek için çünkü başka bir sorun, var (IN kodunu()?) veya (vE kullanıcı adı) parametrelere bağlı olarak?

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

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

mysql kullanarak bir PreparedStatement benzersiz sorgu inşa etmenin mümkün olduğunu: bildiğim tek yol gibi dize birleştirme kullanıyor?

GİBİ:

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

kesin sorun nedir? Sorguyu dinamik olarak Java'da oluşturamaz mısınız? –

+0

Evet, her bir –

+0

için bir yöntem oluşturmamak için, parametrelere bağlı olarak dinamik yapmak istiyorum Burada bir probleminiz olduğunu düşünmüyorum, açıkçası bunu kullanarak parçalarınızı dize oluşturarak nasıl çözeceğinizi bildiğinizi açıkça gösterirsiniz. Eğer java kodunuzda ise. Hayır, mevcut parametrelere dayanarak WHERE ifadeleri eklemek/çıkarmak için SQL mantığı yoktur. Bu http://stackoverflow.com/questions/87821/sql-if-clause-within-where-clause gibi bir şeyi gerçekleştirmek için IF veya CASE mantığını kullanabilirsiniz, ancak muhtemelen alacağınız kadar yakındır. – Squeegy

cevap

0

O where portion görünüyor burada 'olmayan ortak' faktördür. Where yan tümcesi için bir dize iletebilir ve hiçbiri yoksa null geçirebilirsiniz. Böyle bir şey ...

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

else 
    doWork(null); 

Ve DoWork ... gibi bir şey olurdu

private static void doWork(String WHERE) { 
    String st = "SELECT * FROM table "; 
    if(WHERE != null) { 
     st += WHERE; 
    ..... 
} 
İlgili konular