我有以下情况:
Class B有一个方法,它接收带有查询的字符串,执行它并返回Resultset。Class A创建一个SPARQL查询并在Class B中调用该方法。问题是,当Class A取回Resultset对象时,它是空的!当然,因为查询是在Class B中关闭的(参见jena.query.ResultSet和jena.query.QuerySolution: SPARQL请求后的空迭代器)。
我的问题是,这怎么能成为模块化的呢?我希望有一个只执行SPARQL查询的Class B,而不必知道结果结构或任何东西。我希望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();
}发布于 2014-06-19 09:25:30
默认情况下,ResultSet几乎总是流的,所以您正确地说关闭QueryExecution将导致ResultSet的行为就好像它是空的。
您可以使用ResultSet方法在内存中使用可重用的副本,并将其传回。
ResultSet results = ResultSetFactory.copyResults(qe.execSelect());这允许B类安全地关闭QueryExecution,并为调用代码提供一个非空的ResultSet,前提是查询首先生成任何答案!
https://stackoverflow.com/questions/24298748
复制相似问题