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