我正在使用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().
答案 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左右)。