2014-06-19 34 views
1

我有以下情況:獲得耶拿結果集關閉查詢之後 - 對模塊化

  • Class B具有接收與查詢字符串的方法,執行它 並返回Resultset

  • Class A創建一個SPARQL查詢並調用Class B中的方法。

的問題是,當Class A得到Resultset對象返回,它是空的!當然,因爲該查詢在Class B(參見jena.query.ResultSet and jena.query.QuerySolution: empty iterator after SPARQL request)中關閉。

我的問題是,這怎麼能做到模塊化呢?我想有一個Class B只執行SPARQL查詢,而不必知道結果結構或任何東西。我想Class B來處理查詢創建和查詢關閉,因爲Class A沒有意義。

Class B: 

try { 
      Query query = QueryFactory.create(myQuery); 
      qe = QueryExecutionFactory.create(query, ontology); 
      ResultSet results = qe.execSelect(); 
      return results; 
     } catch (...){ 
      ... 
     } finally { 
      ... 
       qe.close(); 
      } 

回答

3

一個ResultSet幾乎總是默認流下來,你是在說相當正確的關閉QueryExecution將導致ResultSet充當如果它是空的

你可以把一個可重用的內存中拷貝的ResultSet使用ResultSetFactory.copyResults()方法,並將其傳遞回來,例如

ResultSet results = ResultSetFactory.copyResults(qe.execSelect()); 

這使得B類安全地關閉QueryExecution,並提供了一個非空ResultSet調用代碼假設,當然,該查詢產生任何答案擺在首位的!