【问题标题】:Insert values to mysql table via Java GUI通过 Java GUI 将值插入 mysql 表
【发布时间】:2014-10-07 18:23:52
【问题描述】:

我正在使用 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().

【问题讨论】:

    标签: java mysql swing


    【解决方案1】:

    executeQuery() 方法仅用于执行选择语句。对于插入、更新和删除语句,您应该使用executeUpdate() method

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

    【讨论】:

      【解决方案2】:
      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 左右)。

      【讨论】:

        猜你喜欢
        • 2014-11-29
        • 1970-01-01
        • 2014-10-11
        • 2020-07-18
        • 2017-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多