通过Java GUI将值插入mysql表

时间:2014-10-07 18:23:53

标签: java mysql swing

我正在使用java和mysql,我遇到了问题。我试图创建一个带GUI的应用程序,将数据插入到mysql表中,这就是代码:

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().

2 个答案:

答案 0 :(得分:3)

executeQuery()方法仅用于执行select语句。对于insert,update和delete语句,您应该使用executeUpdate() method

  

执行给定的SQL语句,该语句可以是INSERT,UPDATE或DELETE语句,也可以是不返回任何内容的SQL语句,例如SQL DDL语句。

答案 1 :(得分: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左右)。