语义web-jenasparql

语义web-jenasparql,sparql,jena,Sparql,Jena,在sparql jena中执行查询后,我尝试以列表的形式获取查询结果,因此我使用了以下方法: res = ResultSetFormatter.toList(results); 但是当我在这个方法之前写这个方法时,变量res返回null ResultSetFormatter.out(System.out, results); res = ResultSetFormatter.toList(results); 我不知道问题出在哪里。猜测一下,我会说ResultSetFormat

在sparql jena中执行查询后,我尝试以列表的形式获取查询结果,因此我使用了以下方法:

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()。我建议您只使用较小的结果集来执行此操作,因为它需要保存在内存中。