有没有办法更新PreparedStatement

时间:2016-06-16 19:27:50

标签: java mysql

是否有一种简单的方法可以向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);
}

我知道没有添加方法,我的问题是:有什么我可以使用的吗?

2 个答案:

答案 0 :(得分:0)

您可以使用SELECT构建 StringBuilder 语句,然后将完成的字符串传递给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子句的逻辑。

答案 1 :(得分: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);
          }