As the title clearly describes, we resultset.hasNext() returns false unexpectedly.
Here is my SPARQL query and Java source code based on Jena:
SELECT ?s ?label WHERE { ?s rdfs:label ?label. FILTER(CONTAINS(LCASE(?label), "university"@en)). } LIMIT 5
Query query = QueryFactory.create(PREFIX + sparqlQuery);
QueryExecution queryExecution = QueryExecutionFactory.sparqlService("https://query.wikidata.org/sparql", PREFIX + sparqlQuery);
try {
ResultSet results = queryExecution.execSelect();
ResultSetFormatter.out(System.out, results, query);
while (results.hasNext()) { // returns false
QuerySolution querySolution = results.next();
System.out.println(querySolution.getResource("s"));
}
} catch (Exception ex) {
System.err.println(ex.getMessage());
} finally {
queryExecution.close();
}
Here is the output:
------------------------------------------------------
| s | label |
======================================================
| wd:Q1060 | "Technical University of Hamburg"@en |
| wd:Q1060 | "Technical University of Hamburg"@en-ca |
| wd:Q1060 | "Technical University of Hamburg"@en-gb |
| wd:Q1060 | "Technical University of Hamburg"@nl |
| wd:Q4027 | "Jean Moulin University Lyon 3"@en |
------------------------------------------------------
You can only iterate once over the
Resultset, and this already happens in the convenience methodResultSetFormatter.out(...)I don't know whether you really need to process the
ResultSettwice, but if so you can create aResultSetRewindablewhich allows to reset the cursor: