我有以下情况:
B 类
有一个方法,该方法接收带有查询的字符串并执行它 并返回结果集
。A 类
创建 SPARQL 查询并调用B 类
中的方法。
问题是,当A类
取回Resultset
对象时,它是空的!当然,因为查询在 B 类
中是关闭的(请参阅 jena.query.ResultSet and jena.query.QuerySolution: empty iterator after SPARQL request )。
我的问题是,如何才能将其模块化?我想要一个仅执行 SPARQL 查询的 B 类
,而无需了解结果结构或任何内容。我希望 B 类
处理查询创建和查询关闭,因为 A 类
执行此操作毫无意义。
Class B:
try {
Query query = QueryFactory.create(myQuery);
qe = QueryExecutionFactory.create(query, ontology);
ResultSet results = qe.execSelect();
return results;
} catch (...){
...
} finally {
...
qe.close();
}
最佳答案
ResultSet
默认情况下几乎总是流式传输,因此您说关闭 QueryExecution
将导致 ResultSet
充当如果为空
您可以使用ResultSetFactory.copyResults()获取ResultSet
的可重用内存副本。方法并将其传回,例如
ResultSet results = ResultSetFactory.copyResults(qe.execSelect());
这允许类 B 安全地关闭 QueryExecution
并向调用代码提供非空 ResultSet
,当然假设查询首先生成任何答案!
关于java - 关闭查询后获取耶拿结果集 - 用于模块化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24298748/