2016-06-16 61 views
0

是否有一種簡單的方法將某些內容添加到PreparedStatement中? 例如:有沒有更新PreparedStatement的方法

ps = connection.prepareStatement("SELECT DISTINCT nazivpredmeta, iddokumenta, nazivdokumenta, putanja, datumskeniranja FROM skeniranidokumenti , predmet WHERE " 
if(osnovnibroj!=null){ 
    ps.add("predmet.osnovnibroj=? "); 
    ps.setObject(1, osnovnibroj); 
} 
if(iddepartmana!=null){ 
if(osnovnibroj!=null){ 
    ps.add("AND skeniranidokumenti=? "); 
    ps.setObject(1, iddepartmana); 
}else{ 
    ps.add("skeniranidokumenti=? "); 
    ps.setObject(1, iddepartmana); 
} 

我知道有沒有添加方法,我的問題是:是不是我可以使用嗎?

+0

沒有。一旦準備好了,聲明就完成了。它就相當於製作一塊麪包,然後意識到你想添加葡萄乾。烘焙前必須將葡萄乾添加到麪糰中。事後添加是不實際的。例如它的構建 - >準備,而不是構建 - >準備 - >構建 - > buildbuildbuildbuild->執行。 –

回答

0

你可以使用StringBuilder構建你的SELECT語句,然後完成字符串傳遞給connection.prepareStatement()

StringBuilder sb = new StringBuilder("SELECT DISTINCT nazivpredmeta, iddokumenta, nazivdokumenta, putanja, datumskeniranja FROM skeniranidokumenti , predmet WHERE TRUE"); 
if (osnovnibroj != null) 
{ 
    sb.append(" AND predmet.osnovnibroj = ?"); 
} 
if (iddepartmana != null) 
{ 
    sb.append(" AND skeniranidokumenti = ?"); 
} 

ps = connection.prepareStatement(sb.toString()); 

if (iddepartmana != null) 
{ 
    if (osnovnibroj != null) 
    { 
     ps.setObject(1, osnovnibroj); 
     ps.setObject(2, iddepartmana); 
    } 
    else 
    { 
     ps.setObject(1, iddepartmana); 
    } 
} 
else if (osnovnibroj != null) 
{ 
    ps.setObject(1, osnovnibroj); 
} 

請注意,我用的伎倆WHERE TRUE簡化構建WHERE條款的邏輯。

0

不,你不能簡單..你可以這樣做:

String query="SELECT DISTINCT nazivpredmeta, iddokumenta, nazivdokumenta, putanja, datumskeniranja FROM skeniranidokumenti , predmet WHERE "; 

      if(osnovnibroj!=null){ 
       query=query+"predmet.osnovnibroj=? "; 
       ps = connection.prepareStatement(query); 
       ps.setObject(1, osnovnibroj); 
      } 
相關問題