2014-09-26 68 views
0

我使用耶拿API和我運行一個SELECT查詢這就好比是這個 -如何從SPARQL SELECT查詢獲得的結果集轉換爲地圖

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

這其中一列就是'返回一個結果集流',另一個是'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); 
} 

但是,這得到一個錯誤的說法我不能使用findColumn方法。有什麼方法可以實現從結果集中獲取地圖的目標。如果這看起來完全錯誤,有人建議我採用更好的方法來實現從結果集中獲取地圖的目標。

+0

爲什麼不使用的基礎知識:'rs.getString( 「流」)'和' rs.getInt(「numberOfStudents」)' – ares 2014-09-26 15:23:54

+0

這是一個奇怪的錯誤... 你可以打印確切的堆棧跟蹤? findColumn文檔說: SQLException - 如果ResultSet對象不包含標記爲columnLabel的列,則會發生數據庫訪問錯誤,或者在已關閉的結果集上調用此方法 @ares:這應該沒有區別 - 而且效率低下。 – Centril 2014-09-26 15:28:21

+0

我沒有得到堆棧跟蹤中的錯誤,當我嘗試使用此方法時findcolumn()eclipse發出錯誤並說 - 方法findColumn(String)對於類型ResultSet未定義。 – 2014-09-26 15:34:20

回答

1

這是將sparql ResultSet轉換爲您的案例中的Map的替代方法。

1.Include以下進口:

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; 
} 
相關問題