2014-10-07 2 views
0

Я работаю с java и mysql, и перед вами стоит проблема. Я пытаюсь создать приложение с графическим интерфейсом для вставки данных в таблицу тузда и это код:Вставить значения в таблицу mysql через Java GUI

public void insertuser(String fullname,String salary,String adress,String username,String password) throws SQLException 
{ 
    openconnection(); 
    //openconnection method works well 
    String queryInsert = 
     "INSERT INTO hema.employee (Emp_name,Emp_salary,Adress,UserName,PassWord)" 
     + "VALUES ('"+fullname+"','"+salary+"','"+adress+"','"+username+"','"+password+"')"; 
    Statement stm=(Statement) con.createStatement(); 
    ResultSet rs; 
    stm.executeQuery(queryInsert); 
} 

и в классе JFrame я называю этот метод, используя этот код:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    try { 
     String NAME =jTextField1.getText(); 
     String SALARY =jTextField2.getText() ; 
     String ADRESS =jTextField3.getText(); 
     String USER =jTextField4.getText(); 
     String PASS =jPasswordField1.getText(); 

     Employee emp=new Employee(); 
     emp.insertuser(NAME, SALARY, ADRESS, USER, PASS); 
    } catch (SQLException ex) { 
     Logger.getLogger(Register.class.getName()).log(Level.SEVERE, null, ex); 
    }  
}           

и первая ошибка у меня есть:

java.sql.SQLException: Can not issue data manipulation statements with executeQuery().

ответ

3

метод executeQuery() только для выполнения операторов выбора. Для операторов вставки, обновления и удаления вы должны использовать executeUpdate() method.

Выполняет данный оператор SQL, который может быть оператором INSERT, UPDATE или DELETE или оператором SQL, который ничего не возвращает, например SQL DDL.

+0

спасибо большое :) –

1
String sqlInsert = 
    "INSERT INTO hema.employee (Emp_name,Emp_salary,Adress,UserName,PassWord)" 
    + "VALUES (?, ?, ?, ?, ?)"; 
try (PreparedStatement stm = con.prepareStatement(sqlInsert)) { 
    stm.setString(1, fullname); 
    stm-setBigDecimal(2, new BigDecimal(salary)); 
    stm.setString(3, adress); 
    stm.setString(4, username); 
    stm.setString(5, password); 
    int updateCount = stm.executeUpdate(); // 1 when inserted 1 record 
} // Closes stm 

ошибка, что для INSERT, DELETE. UPDATE и такой executeUpdate.

Также закройте инструкцию, например, используя вышеуказанные try-with-resources.

Важно использовать подготовленный оператор. Это мера безопасности (против SQL injection), но также ускользает от котировок и обратных косых черт в значениях

Еще одно преимущество подготовленного заявления состоит в том, что вы можете его повторно использовать; не так необходимо здесь.

Но более важным является безопасная установка полей полей: я изменил поле зарплаты на использование BigDecimal, соответствующее числовым значениям с десятичными знаками (тип столбца SQL DECIMAL или так).

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