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

时间:2014-09-26 15:18:46

标签: java sparql resultset

我正在使用jena API,我正在运行SELECT查询,就像这样 -

SELECT ?stream ?numberOfStudents
where {
       ?stream inst:hasNumber ?numberOfStudents
}

这将返回一个ResultSet,其中一列是' stream'而另一个是“#OfStudents'”。现在我尝试使用以下代码将其转换为地图 -

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

但这是一个错误,说我不能使用findColumn方法。有没有办法实现我从结果集中获取地图的目标。如果这看起来绝对错误,那么有人会建议我采用更好的方法来实现从结果集中获取地图的目标。

1 个答案:

答案 0 :(得分:1)

这是在您的情况下将sparql ResultSet转换为Map的另一种方法。

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