2016-10-04 4 views
3

У меня около 40 веб-сервисов, и для каждого из них у меня есть следующий код для получения результатов из базы данных. В лучшем случае я извлекаю только около 200 строк из базы данных, во много раз меньше, чем это. Тем не менее, мне сказал другой разработчик, что этот код не очень эффективен, особенно метод getColumnName, что дорого. Я просто подумал, что буду использовать getColumnName в качестве ключа, потому что он описательный. Есть ли более эффективный способ сделать то же самое, что и ниже? Если да, то как я могу сделать это более эффективным? Любые шаблоны проектирования, которые я должен изучить, чтобы сделать это лучше? Заранее спасибо.Эффективный способ кодирования Java ResultSet

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); 
} 
Смежные вопросы