2015-04-20 3 views
-1

Я побежал FindBugs и это ошибка в строке 2.FindBugs говорит, что мне нужно «использовать подготовленное заявление»? Как?

Statement st = con.createStatement(); 
         st.executeUpdate("UPDATE menu set menu.name'" 
           + value2 + "', menu.info'" + value3 
           + "', menu.price'" + value4 
           + "' where menu.menuID='" + value1 + "'"); 
         JOptionPane.showMessageDialog(p2, 
           "Updated successfully"); 
         con.close(); 
        } catch (Exception ex) { 
         JOptionPane.showMessageDialog(p2, 
           "Error in updating edit fields"); 
        } 
       } 
      } catch (Exception ex) { 
       JOptionPane.showMessageDialog(p2, "Error"); 
      } 
     } 
    }); 

Я побежал FindBugs и это ошибка в строке 2.

Bug: ie.lyit.flight.Changeadd $ 5. actionPerformed (ActionEvent) передает непостоянную String методу execute или addBatch в операторе SQL. Метод вызывает метод execute или addBatch в операторе SQL со строкой, которая, как представляется, динамически генерируется. Вместо этого рассмотрите использование подготовленного заявления. Он более эффективен и менее уязвим для атак SQL-инъекций.

Ранг: Настораживает (10), уверенность в себе: Высокий Выкройка: SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE Тип: SQL, Категория: Безопасность (Security)

мне было интересно, если кто-нибудь знает, как избавиться от этой ошибки и как Я бы это сделал?

+1

Может быть, «используя подготовленное заявление вместо»? Можете ли вы более подробно рассказать о своей проблеме в деталях? – Marvin

+0

Да и как я могу исправить свою возможность, сделав это, и используя подготовленное заявление – reginafalange101

+1

Обязательно: https://xkcd.com/327/ –

ответ

3

См. the JDBC tutorial on using prepared statements.

В этом случае, это может выглядеть примерно так:

stmt = con.prepareStatement("UPDATE menu set menu.name=?, menu.info=?, menu.price=? where menu.menuID=?") 
stmt.setString(1, value2); /* menu.name */ 
stmt.setString(2, value3); /* menu.info */ 
stmt.setFloat(3, value4); /* menu.price */ 
stmt.setInt(4, value1); /* menuID */ 
stmt.executeUpdate(); 
+0

спасибо Чарльз – reginafalange101