2012-08-06 12 views
7

Muszę utworzyć metodę "zapytania" dla mojej klasy, która uzyskuje dostęp do MySQL poprzez JDBC.Jak pobrać cały wiersz jako tablicę obiektów za pomocą JDBC

Parametrem wejściowym do metody jest pełne polecenie SQL (z wartościami), więc nie znam nazw kolumn do pobrania.

Niektóre z kolumn są ciągi, inni są liczbami całkowitymi, itp

Metoda musi zwracać wartość typu ArrayList<HashMap<String,Object>> gdzie każdy HashMap jest 1 wiersz, a ArrayList zawiera wszystkie wiersze wyniku.

Zastanawiam się, czy użyć numeru ResultSet.getMetaData().getColumnCount(), aby uzyskać liczbę kolumn, a następnie pobrać komórkę z komórki z bieżącego wiersza, ale czy jest to jedyne rozwiązanie? jakieś lepsze?

Odpowiedz

13

Mam tutaj przykładowy kod, na wypadek, gdyby ktoś go potrzebował. ("Con" w kodzie to standardowe połączenie 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 
Powiązane problemy