关闭查询后获取Jena Resultset - 用于模块化

时间:2014-06-19 04:23:05

标签: java database resultset jena

我有以下情况:

  • Class B有一个方法,它接收带有查询的String,然后执行它 并返回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();
            }

1 个答案:

答案 0 :(得分:4)

默认情况下,ResultSet几乎总是流式传输,所以你说关闭QueryExecution会导致ResultSet表现为空是

您可以使用ResultSetFactory.copyResults()方法获取ResultSet的可重复使用的内存副本,然后将其传回,例如。

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

这允许B类安全地关闭QueryExecution并为调用代码提供非空ResultSet,当然假设查询首先产生任何答案!