как проверить, возвращается ли запрос к репозиторию cmis пустым

    queryString = " ..." ;
    ItemIterable<QueryResult> results = session.query(queryString, false);
    // this line simply fails, it doesn't throw an exception.
    for (QueryResult qResult : results) {
       // ....
    }

Есть ли способ проверить, пуст ли results перед запуском цикла for?

Спасибо


person LeTex    schedule 16.10.2012    source источник
comment
похоже, что нет другого способа, кроме как попытаться поймать любое исключение, которое может произойти.   -  person LeTex    schedule 17.10.2012


Ответы (1)


Метод session.query() не связывается с репозиторием. Он только подготавливает объект («результаты»), который может общаться с репозиторием и выполнять запрос. Пока вы не извлекаете данные из этого объекта «результаты», он ничего не знает о результирующем наборе. В вашем примере цикл for выполняется впервые. Если результирующий набор пуст, цикл пропускается.

Если вам не нравится использовать цикл для проверки наличия результатов, вы можете сделать это перед циклом:

if (results.getPageNumItems() == 0) {
  // break here
}

Метод getPageNumItems() извлекает первый пакет (страницу) результатов запроса. Если результирующий набор пуст, этот первый пакет пуст. С точки зрения производительности не имеет значения, делаете ли вы это или проверяете, был ли пропущен цикл. Оба делают одно и то же обращение к серверу.

Он не должен генерировать исключение, генерировать. Если это так, проверьте свой запрос и, в зависимости от исключения, поговорите с вашим поставщиком репозитория.

person Florian Müller    schedule 17.10.2012