如何检索列';sparql中的s值

如何检索列';sparql中的s值,sparql,Sparql,我需要在执行查询后检索列的值。查询将在Eclipse控制台中运行并给出正确答案。我只需要从行中检索一个属性值。 完整的代码存储在SemanticSearch.java中。此函数是从Admin.java调用的 public int searchForUser(String userName, String password) { String prolog="PREFIX kb:<"+VUSER.getURI()+">"; System.out.println("Searc

我需要在执行查询后检索列的值。查询将在Eclipse控制台中运行并给出正确答案。我只需要从行中检索一个属性值。 完整的代码存储在SemanticSearch.java中。此函数是从Admin.java调用的

public int searchForUser(String userName, String password)
{ 
  String prolog="PREFIX kb:<"+VUSER.getURI()+">"; 
  System.out.println("Search for user in semantic search.java"); 
  String queryString1=prolog 
    +"\n" +"SELECT interest " 
    +WHERE {?x kb:Uname ?username. ?x kb:Password ?password. ?x kb:Interest ?interest. "            
    +"FILTER regex(?username, \"" +userName +"\" )}"; 
  System.out.println(queryString1); 
  Query query=QueryFactory.create(queryString1); 
  QueryExecution qexec = QueryExecutionFactory.create(query, model);
  ResultSet results1 = qexec.execSelect();

  //System.out.println(results1);
  //ResultSetFormatter.out(results1);
  ResultSetFormatter.out(System.out, results1,query);
  if(results1.getRowNumber()>0)
  {
    QuerySolution soln=results1.nextSolution();
    Literal RES=soln.getLiteral("Interest");
    String RES=results1.
    int res=results1.getRowNumber();
    System.out.println(RES);
    return res;
  }
  else
  {
    return 0;
  }
}
此错误发生后:

Feb 10, 2011 10:50:56 AM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: 
Servlet.service() for servlet Admin threw exception java.util.NoSuchElementException: QueryIteratorCloseable
at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.nextBinding(QueryIteratorBase.java:93) 
at com.hp.hpl.jena.sparql.engine.ResultSetStream.nextBinding(ResultSetStream.java:74) 
at com.hp.hpl.jena.sparql.engine.ResultSetStream.nextSolution(ResultSetStream.java:91)
at semanticsearch.SemanticSearch.searchForUser(SemanticSearch.java:126) 
at controller.Admin.doGet(Admin.java:84) at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
at java.lang.Thread.run(Unknown Source)
我无法检索列中的值。 救命啊。
尊敬。

好的,那么我的下一个怀疑是您试图迭代超过迭代器的末尾。使用条件results1.getRowNumber()>0是一个非常糟糕的主意,因为据我所知,它总是>0(尽管这在Javadoc for ARQ中并不清楚)

相反,我将用results1.hasNext()替换该条件,并查看是否可以修复它

修订的原始答案

我怀疑这只是变量名区分大小写的情况

更换线路:

Literal RES=soln.getLiteral("Interest");
Literal RES=soln.getLiteral("interest");
用这句话:

Literal RES=soln.getLiteral("Interest");
Literal RES=soln.getLiteral("interest");
我怀疑它会很好地工作。

我已经修复了您的代码示例的格式-请在发布它们时尝试使它们可读,因为如果人们无法理解您的代码副本,则很难帮助您。错误在包含代码的行中:QuerySolution soln=results1.next();我是否需要从ARQ导入任何特定的库。很抱歉,我不知道stackoverflow.com和semanticoverflow.com由同一组程序员支持。我需要紧急帮助,所以我找到了所有可能的方法。我已经在semanticoverflow.com上发布了这个错误。代码的格式很抱歉。无需道歉,SemanticCoverFlow上的许多成员也是这里的成员,就这两个问题提问将始终确保您的问题具有更高的可视性