2012-08-06 7 views
7

Devo fare un metodo di 'query' per la mia classe che accede a MySQL attraverso 'JDBC.Come recuperare l'intera riga come matrice di oggetti con JDBC

Il parametro di input per il metodo è un comando SQL completo (con valori inclusi), quindi non conosco i nomi delle colonne da recuperare.

Alcune delle colonne sono stringhe, altri sono numeri interi, ecc

Il metodo deve restituire il valore di tipo ArrayList<HashMap<String,Object>> dove ogni HashMap è 1 fila, e l'ArrayList contiene tutte le righe di risulta.

Sto pensando di utilizzare ResultSet.getMetaData().getColumnCount() per ottenere il numero di colonne quindi recuperare cella per cella fuori dalla riga corrente, ma è questa l'unica soluzione? qualcuna migliore?

risposta

13

Ho il codice di esempio qui, nel caso in cui qualcuno ne abbia bisogno. ('Con' nel codice è la connessione JDBC standard).

//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 
Problemi correlati