2017-09-10 8 views
0

タイトルがはっきりと説明するように、resultset.hasNext()は予期せずfalseを返します。ここでWikidata - resultset.hasNext()は結果が取得されてもfalseを返します

はイエナに基づいて私のSPARQLクエリとJavaのソースコードである:ここで

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(); 
} 

が出力されます。

------------------------------------------------------ 
| 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  | 
------------------------------------------------------ 

答えて

5

あなただけResultsetの上に一度繰り返すことができ、かつこれはすでに便利な方法で発生していますResultSetFormatter.out(...)

私はあなたが本当に二回ResultSetを処理する必要があるかどうか知らないが、あなたは、カーソルをリセットすることができますResultSetRewindableを作成することができますので、場合:

Query query = QueryFactory.create(PREFIX + sparqlQuery); 
QueryExecution queryExecution = QueryExecutionFactory.sparqlService("https://query.wikidata.org/sparql", PREFIX + sparqlQuery); 
try { 
    ResultSet rs = queryExecution.execSelect(); 
    ResultSetRewindable results = ResultSetFactory.copyResults(rs); 
    ResultSetFormatter.out(System.out, results, query); 
    results.reset(); 
    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(); 
} 
+0

私は、カーソルは、呼び出し後にリセットされていない気づいていませんでした'ResultSetFormatter.out()'メソッド。 – talha06

関連する問題