检查MySQL

时间:2016-09-04 23:52:10

标签: java mysql jsp servlets

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;
}

2 个答案:

答案 0 :(得分:1)

根据结果判断,您应该从计算方法中删除insertRecord(connection)方法调用,并在计算完成后调用insertRecord(connection)

或者,您可以通过检查密钥是否已存在来使用Insert ... On Duplicate Update SQL。

MySQL: INSERT ... On Duplicate Update

答案 1 :(得分:1)

insertRecord方法中,sql查询用于插入,因此每次调用方法时,都会插入新记录。
=========================
问题在insertRecord方法中,您从所有方法调用insertRecord方法其他三种方法,如computeGrosscomputeTakeHomePaycomputeCommission和内部insertRecord方法,问题就在这一行:

String sql="insert into MachineProblem1(EmployeeName, EmployeeCode, EmployeeSales, EmployeeGross, EmployeeCommission, EmployeeResult)"+ "values(?,?,?,?,?,?)";

它在数据库中插入三条记录,因为它三次调用此方法体。

如果你想解决这个问题,我建议你创建一个新的方法updateRecord,在其中你将更新以前插入的记录。 并且在您的代码中更改,无论您首先调用哪种方法,它都会调用insertRecord方法,而其他方法则调用updateRecord方法。因此,该条目未插入三次,仅更新前一个条目。