语义web-jenasparql
在sparql jena中执行查询后,我尝试以列表的形式获取查询结果,因此我使用了以下方法:语义web-jenasparql,sparql,jena,Sparql,Jena,在sparql jena中执行查询后,我尝试以列表的形式获取查询结果,因此我使用了以下方法: res = ResultSetFormatter.toList(results); 但是当我在这个方法之前写这个方法时,变量res返回null ResultSetFormatter.out(System.out, results); res = ResultSetFormatter.toList(results); 我不知道问题出在哪里。猜测一下,我会说ResultSetFormat
res = ResultSetFormatter.toList(results);
但是当我在这个方法之前写这个方法时,变量res
返回null
ResultSetFormatter.out(System.out, results);
res = ResultSetFormatter.toList(results);
我不知道问题出在哪里。猜测一下,我会说
ResultSetFormatter.out(ResultSet)
消耗ResultSet
。因此,此方法完成后,ResultSet
为空
这与迭代器的工作方式有点相似:迭代所有元素后,迭代器为空。主要的
ResultSet
实现是com.hp.hpl.jena.sparql.engine.ResultSetStream
,只能使用一次,而您尝试使用它两次。ResultSetStream
的API说明:
用于从查询返回结果的主ResultSet实现。
此版本为“使用一次”-您无法重置结果集,因为
查询结果不会被记住,以免消耗
潜在的大量内存
下面Jeen和MikeJ的回答都是正确的。如果要使结果集可倒带,可以使用:resultsetreewindable results=ResultSetFactory.makeRewindable(res);并在需要倒带以再次使用时调用results.reset()。我建议您只使用较小的结果集来执行此操作,因为它需要保存在内存中。