Jawa / Говнокод #26204 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
Statement stmt = null; 
ResultSet rs = null; 

try{     
stmt = connection.createStatement();    
ResultSet rs = stmt.executeQuery("select * from VENDORS");   
 while(rs.next())
     {
      //тело цикла....
       }
 } 
finally
{ 
     rs.close(); stmt.close(); 
}

Тимлид сказал что за такое будет руки отрывать. Что тут не так?

Запостил: mozga mozga, (Updated )

Комментарии (34) RSS

  • Да это понятно, что с ресурсами можно, но ведь finally выполнится в любом случае. В чем тогда проблема? И порядок закрытия соблюден. То есть тут вроде нет почвы для ошибки, или это вопрос религии?
    Ответить
    • А что будет если инициализация stmt выбросит исключение? null будешь закрывать?
      Ответить
        • а ещеты ты добавил в область видимости stmt и rs
          а в The try-with-resources Statement
          нет
          Ответить
          • Зачем скрывать из области видимости stmt и rs?

            Понял, они же закрываются, так что после исполнения цикла они не нужны.
            Ответить
    • Пипец ты тупорылый, прости за прямоту.
      Должно быть как-то так:
      Statement stmt; 
      ResultSet rs; 
      
        try{     
         stmt = connection.createStatement();     
         ResultSet rs = stmt.executeQuery("select * from VENDORS");  
         try
          { 
              while(rs.next())
               {
                //тело цикла....
                }
          } 
         finally
           { 
             rs.close(); stmt.close(); 
           }
       }
        catch{e}
         MessageBox('Джава наебнулась');
      }
      Ответить
        • Элементарно, Ватсон mozga!
          В блоке try..catch отлавливается исключение, если вызов фабричных методов "connection.createStatement();" и "ResultSet rs = stmt.executeQuery("select * from VENDORS"); " был неудачен. В противном случае, инструкция входит в блок try..finally, где работает с полученными экземплярами объектов и затем освобождает их.
          Ответить
          • Я вижу тут только одну проблему - это если закрытие ресурсов произойдет с исключением, вот для них может быть полезен блок try-catch.
            Ответить
            • С чего бы статься такой оказии? Если деструктор кидает исключение, это плохо.
              Ответить
              • ну на сколько я понимаю блок try не может выкинуть исключение т.к. в случае "неудачного" запроса тело цикла просто не исполнится т.е. условие цикла будет =false. Затем исполнится finally. И если в нем выкинется исключение, то следующий ресурс не будет закрыт. Т.е. rs.close() нужно поместить в еще один вложенный try-catch, чтобы последний ресурс был закрыт. Но получается уже сложная конструкция, лучше делать try-with-resources.
                Ответить
            • Уважемый, вы говорите с уёбком
              Не нужно этого делать
              Ответить
    • Не стоит отвечать больным ублюдкам, кстати
      Ответить
  • У вас там нет никакой ОРМ или хотя бы билдера запросов? Переменные с помощью mysql_real_escape_string() экранируете?
    Ответить

Добавить комментарий

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8