2012-08-06 20 views
7

Sınıfım için MySQL'den JDBC'ye erişen bir 'sorgu' yöntemi kullanmalıyım.JDBC ile tüm satırı nesne olarak getirme

Yönteme giriş parametresi dolu bir SQL komutudur (değerlerle birlikte), bu yüzden alınacak sütun adlarını bilmiyorum.

sütunlardan bazıları

her HashMap 1 satır ve ArrayList sonucunun bütün sıraları içermektedir

yöntem türü ArrayList<HashMap<String,Object>> değerini döndürmek gerekiyor vs, bazıları ise tam sayılardır, dizelerdir.

Sütun sayısını almak ve ardından geçerli satırdan hücreye hücre almak için ResultSet.getMetaData().getColumnCount() kullanmayı düşünüyorum, ancak bu tek çözüm mü? daha iyi olanları?

cevap

13

Buradaki örnek kodum var, sadece ihtiyaç duyduğunda. (Kodda 'Con' standart JDBC bağlantısıdır).

//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 
İlgili konular