2016-06-13 3 views
0

В настоящее время я работаю над оператором обновления для java. После того, как вы нажмете button, он получит целые данные, которые вы поместите в textfield, и он будет читать имя из выпадающего списка и предоставить соответствующий идентификатор сотрудника. Соединение с базой данных осуществляется через другой класс.Выполнение и sql Строка

ActionListener myActionListener = new ActionListener() { 
     public void actionPerformed(ActionEvent ae) { 
      DatabaseConnection connection = new DatabaseConnection(); 
      if (connection.openConnection()) { 
       String ID = input1.getText(); 
       int orderID = Integer.parseInt(ID); 

       String firstName = (String) cb.getSelectedItem(); 
       System.out.println(firstName); 
       System.out.println(orderID); 
       if (firstName == "Patrick") { 
        int employeeId = 10; 
        String sql = "UPDATE barorder SET statusId=2, employeeId='" + employeeId + "' where id='" + orderID + "' ;"; 
       } 

      } 
     } 
    }; 

Это то, что я получил до сих пор, но я не знаю, как выполнить SQL-строку сейчас. Какие-либо предложения?

+0

Ваш текущий запрос является небезопасным, так как он открыт для инъекции SQL. Я предлагаю вам следовать учебнику [JDBC tutorial] (http://docs.oracle.com/javase/tutorial/jdbc/index.html) и узнать, как использовать подготовленные заявления. –

ответ

3

Вы можете использовать PreparedStatement обновить запрос, как это:

ActionListener myActionListener = new ActionListener() 
    { 
     public void actionPerformed(ActionEvent ae) 
     { 
      DatabaseConnection connection = new DatabaseConnection(); 
      PreparedStatement preparedStatement = null; 
      if (connection.openConnection()) 
      { 
       String ID = input1.getText(); 
       int orderID = Integer.parseInt(ID); 

       String firstName = (String) cb.getSelectedItem(); 
       System.out.println(firstName); 
       System.out.println(orderID); 
       if (firstName == "Patrick") 
       { 
        int employeeId = 10; 

        String sql = "UPDATE barorder SET statusId=2, employeeId= ? where id= ?"; 
        preparedStatement = connection.prepareStatement(sql); 
        preparedStatement.setInt(1, employeeId); 
        preparedStatement.setInt(2, orderID); 
        preparedStatement.executeUpdate(sql); 

       } 

      } 
     } 
    }; 
+1

Ваш ответ небезопасен, так как включает SQL-инъекцию. Рассмотрите отправку ответа, который включает безопасный эквивалент, используя подготовленный оператор. –

+0

Обновил мой ответ. Большое вам спасибо за ваш ценный комментарий. – PVR

+0

Ваше обновление неверно, так как оно не использует параметры для решения проблемы с SQL-инъекцией, и, кроме того, использование 'execute update (String)' в подготовленном операторе должно всегда терпеть неудачу в соответствии со спецификацией JDBC (в MySQL это, вероятно, будет работайте для этого конкретного примера. –

0

PreparedStatement С помощью вы можете решить вашу проблему.

В моем проекте я использовал это

 PreparedStatement prep = conn.prepareStatement("INSERT INTO Signup(Username, password, Email) VALUES(?, ?, ?)"); 
     prep.setString(1, UserName); 
     prep.setString(2, Password); 
     prep.setString(3, Email); 

     prep.executeUpdate(); 

И вы можете получить помощь сформировать ссылку: http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

+0

Оба оператора являются imortant для этого. –

+0

Как: 'PreparedStatement prep ..' и это вызов' prep.setString. ..' –

Смежные вопросы