Java 如何将从Sparql SELECT查询获得的结果集转换为映射

Java 如何将从Sparql SELECT查询获得的结果集转换为映射,java,sparql,resultset,Java,Sparql,Resultset,我使用的是JenaAPI,我正在运行一个SELECT查询,如下所示- SELECT ?stream ?numberOfStudents where { ?stream inst:hasNumber ?numberOfStudents } 这将返回一个结果集,其中一列是“stream”,另一列是“numberOfStudents”。现在,我尝试使用以下代码将其转换为地图- public static getResultAsMap(ResultSet rs){ Map<Stri

我使用的是JenaAPI,我正在运行一个SELECT查询,如下所示-

SELECT ?stream ?numberOfStudents
where {
       ?stream inst:hasNumber ?numberOfStudents
}
这将返回一个结果集,其中一列是“stream”,另一列是“numberOfStudents”。现在,我尝试使用以下代码将其转换为地图-

public static getResultAsMap(ResultSet rs){
Map<String, Integer> myMap = new HashMap<String, Integer>();
int column1Pos = rs.findColumn("stream");
int column2Pos = rs.findColumn("numberOfStudents");
while (rs.next()) {
String column1 = rs.getString(column1Pos);
int column2 = rs.getInt(column2Pos);
myMap.put(column1, column2);
}
publicstaticgetresultasmap(ResultSet-rs){
Map myMap=newhashmap();
int column1Pos=rs.findColumn(“流”);
int column2Pos=rs.findColumn(“numberOfStudents”);
while(rs.next()){
String column1=rs.getString(column1Pos);
int column2=rs.getInt(column2Pos);
myMap.put(第1列、第2列);
}

但是这是一个错误,说明我无法使用findColumn方法。有没有办法实现我从结果集获取映射的目标。如果这看起来完全错误,是否有人可以建议我更好的方法来实现从结果集获取映射的目标。

这是将sparql结果集转换为你的箱子里有一张地图

1.包括以下进口产品:

import java.util.HashMap;
import java.util.Map;
import com.hp.hpl.jena.query.QuerySolution;
import com.hp.hpl.jena.query.ResultSet;
2.使用QuerySolution类进行转换:

public Map<String, Integer> getResultAsMap(ResultSet rs) {
    Map<String, Integer> myMap = new HashMap<String, Integer>();

    for (; rs.hasNext();) {
        QuerySolution soln = rs.nextSolution();

        String stream = soln.get("stream").toString();
        String noOfStudentsStr = soln.get("numberOfStudents").toString();
        int noOfStudents = Integer.parseInt(noOfStudentsStr);
        myMap.put(stream, noOfStudents);
    }

    return myMap;
}
publicmap getResultAsMap(ResultSet-rs){
Map myMap=newhashmap();
对于(;rs.hasNext();){
QuerySolution soln=rs.nextSolution();
String stream=soln.get(“stream”).toString();
字符串noOfStudentsStr=soln.get(“numberOfStudents”).toString();
int noOfStudents=Integer.parseInt(noOfStudentsStr);
myMap.put(流、noOfStudents);
}
返回myMap;
}

为什么不使用基础知识:
rs.getString(“stream”)
rs.getInt(“numberOfStudents”)
这是一个奇怪的错误…你能打印出准确的堆栈跟踪吗?findColumn文档说:SQLException-如果ResultSet对象不包含标有columnLabel的列,则会发生数据库访问错误,或者在关闭的结果集@ares:上调用此方法,这应该不会有什么区别,而且效率低下。我不明白stacktrace中的错误,当我尝试使用这个方法findcolumn()时,eclipse给出了一个错误,并说-findcolumn(String)方法对于类型ResultSet是未定义的。好吧-它显然不是未定义的:eclipse是一个垃圾IDE-我建议切换到Gradle(+Intellij IDEA)。它是另一个类“ResultSet”,而不是JDBC类。请使用getResultVars()查找行中的变量,并按名称查询它们。