MySQL output has duplicate inputs
我遇到了MySQL的问题,其中将重复输入插入到我创建的表中,我使用JSP和Servlet在WebApp中实现了数据库。
例如,当我在表单中输入以下内容时: 员工姓名:Kylo Ren 代码:A 销售额:3000
只需提交一次表单就可以产生3个不同的行。
public void computeGross(Connection connection){
switch(employeeCode){
case "A":
setGross(grossA+(getEmployeeSales()*grossSalesA));
break;
case "B":
setGross(grossB+(getEmployeeSales()*grossSalesB));
break;
case "C":
setGross(grossC+(getEmployeeSales()*grossSalesC));
break;
}
insertRecord(connection);
}
//compute for the commission, if sales>2500; commission=7.5% of sales
public void computeCommission(Connection connection){
if(employeeSales>2500)
setCommission(getEmployeeSales()*commissionVal);
else {
setCommission(0);
}
insertRecord(connection);
}
//compute takehome pay, takehome pay = summation of gross and commission
public void computeTakeHomePay(Connection connection){
setResult(getGross()+getCommission());
insertRecord(connection);
}
private void insertRecord(Connection conn){
try{
String sql="insert into MachineProblem1(EmployeeName, EmployeeCode, EmployeeSales, EmployeeGross, EmployeeCommission, EmployeeResult)"+ "values(?,?,?,?,?,?)";
PreparedStatement pstmnt= conn.prepareStatement(sql);
pstmnt.setString(1, employeeName);
pstmnt.setString(2, employeeCode);
pstmnt.setDouble(3, employeeSales);
pstmnt.setDouble(4, gross);
pstmnt.setDouble(5, commission);
pstmnt.setDouble(6, result);
//now commit to database
pstmnt.executeUpdate();
}catch(SQLException sqle){
sqle.printStackTrace();
}
}
// get records
public ResultSet getAllRecords(Connection conn){
ResultSet records = null;
try{
String sql="select*from MachineProblem1";
PreparedStatement pstmnt= conn.prepareStatement(sql);
records= pstmnt.executeQuery();
}catch(SQLException sqle){
sqle.printStackTrace();
}
return records;
}
答案 0 :(得分:1)
根据结果判断,您应该从计算方法中删除insertRecord(connection)
方法调用,并在计算完成后调用insertRecord(connection)
。
或者,您可以通过检查密钥是否已存在来使用Insert ... On Duplicate Update
SQL。
答案 1 :(得分:1)
在insertRecord
方法中,sql查询用于插入,因此每次调用方法时,都会插入新记录。
=========================
问题在insertRecord
方法中,您从所有方法调用insertRecord
方法其他三种方法,如computeGross
,computeTakeHomePay
,computeCommission
和内部insertRecord
方法,问题就在这一行:
String sql="insert into MachineProblem1(EmployeeName, EmployeeCode, EmployeeSales, EmployeeGross, EmployeeCommission, EmployeeResult)"+ "values(?,?,?,?,?,?)";
它在数据库中插入三条记录,因为它三次调用此方法体。
如果你想解决这个问题,我建议你创建一个新的方法updateRecord
,在其中你将更新以前插入的记录。
并且在您的代码中更改,无论您首先调用哪种方法,它都会调用insertRecord
方法,而其他方法则调用updateRecord
方法。因此,该条目未插入三次,仅更新前一个条目。