2012-08-06 91 views
7

我必須爲通過'JDBC訪問MySQL'的類創建'查詢'方法。如何使用JDBC將整行作爲對象數組取出

該方法的輸入參數是一個完整的SQL命令(包含值),所以我不知道列的名稱可以提取出來。

一些列的都是字符串,有些則是整數,等

的方法需要返回類型ArrayList<HashMap<String,Object>> 的值,其中每一個HashMap的是1行和ArrayList包含結果的所有行。

我想用ResultSet.getMetaData().getColumnCount()來獲取列數,然後從當前行中逐個單元地獲取,但這是唯一的解決方案嗎?任何更好的?

回答

13

我在這裏有示例代碼,以防萬一需要它。 (代碼中的'Con'是標準的JDBC連接)。

//query a full sql command 
public static ArrayList<HashMap<String,Object>> 
rawQuery(String fullCommand) { 
    try { 

    //create statement 
    Statement stm = null; 
    stm = con.createStatement(); 

    //query 
    ResultSet result = null; 
    boolean returningRows = stm.execute(fullCommand); 
    if (returningRows) 
     result = stm.getResultSet(); 
    else 
     return new ArrayList<HashMap<String,Object>>(); 

    //get metadata 
    ResultSetMetaData meta = null; 
    meta = result.getMetaData(); 

    //get column names 
    int colCount = meta.getColumnCount(); 
    ArrayList<String> cols = new ArrayList<String>(); 
    for (int index=1; index<=Col_Count; index++) 
     cols.add(meta.getColumnName(index)); 

    //fetch out rows 
    ArrayList<HashMap<String,Object>> rows = 
    new ArrayList<HashMap<String,Object>>(); 

    while (result.next()) { 
     HashMap<String,Object> row = new HashMap<String,Object>(); 
     for (String colName:cols) { 
     Object val = Result.getObject(colName); 
     row.put(colName,val); 
     } 
     rows.add(row); 
    } 

    //close statement 
    stm.close(); 

    //pass back rows 
    return tows; 
    } 
    catch (Exception ex) { 
    System.out.print(ex.getMessage()); 
    return new ArrayList<HashMap<String,Object>>(); 
    } 
}//raw_query 
相關問題