2016-10-04 13 views
3

我有大約40個Web服務,並且每個服務都有以下代碼來從數據庫中獲取結果。我最多隻能從數據庫中檢索大約200行,比這少數多。然而,一位開發人員告訴我,這個代碼效率不高,尤其是getColumnName方法,這個方法很昂貴。我只是認爲我會用getColumnName作爲關鍵,因爲它是描述性的。有沒有更有效的方法來做同樣的事情?如果是這樣,我怎樣才能讓這個效率更高?我應該研究哪些設計模式以使其更好?提前致謝。高效的Java結果集編碼方式

try{ 
     ... 
     //Open Db Connection 
     ... 
     ResultSet rs = stmt.executeQuery(QueryClass.getQuery()); 
     ResultSetMetaData rsmd = rs.getMetaData(); 
     int columnCount = rsmd.getColumnCount(); 

     while(rs.next()){ 
     HashMap<String, Object> map = new HashMap<String, Object>(columnCount); 
      for (int i = 1; i <= columnCount; i++) { 
      map.put(rsmd.getColumnName(i), rsmd.getObject(i)); 

     } 

     //add to arraylist 
     list.add(map); 
     } 
} catch(SQLException e){ 
    ..... 

} 
+0

你有基準,看到一個性能問題? –

+0

是的,我進行了基準測試,但沒有看到性能問題。鑑於我的同行的評論,我認爲會有更好的方式來寫這個。當我問她爲什麼認爲這樣做效率低下,以及如何讓這件事變得更好時,她不會給我一個答案。 –

+1

所以你證明她錯了,缺乏答案表明她不知道她在說什麼。列名作爲查詢結果的一部分返回:這就是爲什麼它可用。不要擔心這一點。數據庫操作和網絡流量完全支配這裏的運行時間。 – EJP

回答

0

如果您沒有看到性能問題,那麼出於效率原因,確實不需要更改代碼。如果你使用的結構對你有意義,那麼你應該堅持下去。

有你可能要考慮一些其他選項:

  1. 有你一次存儲列名的單獨列表:

    List<String> columnNames;

    List<List<Object>> rowData;

  2. 按列而不是按行記錄數據:

    Map<String, List<Object>> columnData;

  3. 通過定義,可以使用適當的方法下表來實現的接口,可以讓你改變實現,如果你有一個性能問題不改變接口封裝查詢。

例如:

public interface Table { 
    List<String> getColumnNames(); 
    Object getValue(String column, int row); 
}