2012-08-06 2 views
7

Ich muss eine 'Abfrage' -Methode für meine Klasse, die auf MySQL durch 'JDBC.So holen Sie die gesamte Zeile als Array von Objekten mit JDBC

Der Eingabeparameter für die Methode ist ein vollständiger SQL-Befehl (mit Werten enthalten), so dass ich die Namen der Spalten, die abgerufen werden sollen, nicht kenne.

Einige der Spalten sind Strings, einige andere ganze Zahlen sind, usw.

Verfahren den Wert des Typs ArrayList<HashMap<String,Object>> zurückkehren muss, wo jede HashMap 1 Reihe ist, und die Arraylist enthält alle Zeilen des Ergebnisses.

Ich denke an ResultSet.getMetaData().getColumnCount() verwenden, um die Anzahl der Spalten dann Zelle für Zelle aus der aktuellen Zeile abrufen, aber ist dies die einzige Lösung? irgendwelche besseren?

Antwort

13

Ich habe den Beispielcode hier, nur für den Fall, dass jemand es braucht. ('Con' im Code ist die Standard-JDBC-Verbindung).

//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 
Verwandte Themen