java - 检查 MySQL 中的重复插入

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

最佳答案

从结果来看,您应该从计算方法中删除insertRecord(connection)方法调用,只有在计算完成后才调用insertRecord(connection)

或者,您可以使用 Insert ... On Duplicate Update SQL 来检查键是否已经存在。

MySQL: INSERT ... On Duplicate Update

关于java - 检查 MySQL 中的重复插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39322463/

相关文章:

java - 插入数据后无法刷新 JTable 内容

java - Android studio重构为androidx后没有重构.java和.xml文件中的支持类

java - .zip 项目的 Maven 程序集,仅包含 .jar 和配置文件

java - 我一次播放多个音频时遇到问题

mysql - 查询每个研究人员的提交总数

php - 在购物车 session 中添加新的

jsp - 如何在JSP中添加日期选择器

php - friend 系统php和mysql查询?

java - 为什么标准标签 c :forEach? 需要 "items"=false

java - XMLHttpRequest.open() 之后不会出现 URL 中的 AJAX 变量