excecuting在SPARQL耶拿查詢後,我試圖讓查詢結果列表,所以我用這個:語義網 - 耶拿SPARQL
res = ResultSetFormatter.toList(results);
但當我這個方法變量之前寫這個方法res
返回null。
ResultSetFormatter.out(System.out, results);
res = ResultSetFormatter.toList(results);
我不知道是什麼問題。
excecuting在SPARQL耶拿查詢後,我試圖讓查詢結果列表,所以我用這個:語義網 - 耶拿SPARQL
res = ResultSetFormatter.toList(results);
但當我這個方法變量之前寫這個方法res
返回null。
ResultSetFormatter.out(System.out, results);
res = ResultSetFormatter.toList(results);
我不知道是什麼問題。
在猜測,我會說ResultSetFormatter.out(ResultSet)
消耗ResultSet
。因此在此方法完成後,ResultSet
爲空。
這是有點類似的是如何工作Iterator
:一旦你遍歷所有元素,迭代器是空的。
主要的ResultSet
執行是com.hp.hpl.jena.sparql.engine.ResultSetStream
它只能使用一次,而你試圖使用它兩次。 API documentation對於ResultSetStream
說:
返回查詢結果的主要ResultSet實現。 這個版本是「使用一次」 - 你不能重置結果集,因爲 的查詢結果不記得以免消耗 潛在的大量的內存。下面
從Jeen和MikeJ這兩個答案都是正確的。如果你想讓一個ResultSet可回退,你可以使用:ResultSetRewindable results = ResultSetFactory.makeRewindable(res);並在需要倒帶以再次使用時調用results.reset()。我建議你只用小的ResultSet來做這件事,因爲它需要保存在內存中。 – castagna