2016-09-22 3 views
0

У меня есть Map с различными значениями:Alfresco, запрос с динамическими значениями

props = new HashMap<String, Object>(); 
    props.put("cmis:objectTypeId", "D:ruc:PLICO"); 
    props.put("cmis:name", "PLICO_1.pdf"); 
    props.put("cmis:description", "Descr"); 
    props.put("ruc:doc_surname", "Rossi"); 
    props.put("ruc:doc_name", "Mario"); 

Я хочу сделать запрос (QueryStatement или другой), который динамически считывает эти параметры (некоторые из них могут отсутствовать) и строить QueryStatement. Существует ли простой способ генерации запроса String для QueryStatement? Или я должен повторить мой Map, чтобы построить String, содержащий все параметры и значения в моем запросе?

+0

честно никогда не попробовать, но вы пытались использовать '' StringBuilder?!? –

+0

Я просто ищу другой способ не динамически строить строку (или StringBuilder). Мне было интересно, существует ли способ добавить параметр в QueryStatement без создания длинного String/StringBuilder. – Accollativo

+0

Вы нашли что-то новое?!? –

ответ

0

Мое решение, но, может быть, кто-нибудь знает, как не улучшить его без динамического построения строки запроса:

 StringBuilder query = new StringBuilder("SELECT * FROM ? where "); 
     String folder = null; 
     if (path!=null) 
     { 
      folder = findPath(path); 
      if (folder==null) 
      { 
       return null; 
      } 
      query.append("IN_FOLDER(?) AND "); 
     } 

     ArrayList <String> values = new ArrayList<String>(); 
     Map<String, Object> properties = loadAnnotationAndData(doc); 
     String objectType = properties.remove(MyEnum.cmis_object_type_id.getValue()).toString(); 
     for (Map.Entry<String, Object> entry : properties.entrySet()) 
     { 
      System.out.println(entry.getKey() + " - " + entry.getValue()); 
      query.append(entry.getKey() + "=? AND "); 
      values.add(entry.getValue().toString()); 
     }    
     query.delete(query.length()-4, query.length()); 
     query.append(" ORDER BY cmis:creationDate"); 
     System.out.println(query.toString()); 

     Session cmisSession = getCmisSession(); 
     QueryStatement qs= 
       cmisSession.createQueryStatement(query.toString()); 
     int offset = 1; 
     qs.setType(offset++, objectType); 
     if (path!=null) 
     { 
      qs.setString(offset++, folder); 
     } 
     for (int i=0; i<values.size(); i++) 
     { 
      System.out.println(values.get(i).toString()); 
      qs.setString(i+offset, values.get(i).toString()); 
     } 
+0

Я сказал вам использовать StringBuilder –

Смежные вопросы