如何防止用户将重复的条目添加到MySQL数据库中?

时间:2017-11-18 05:24:05

标签: java mysql database

我正在使用Java开发库存数据库程序。我写了一个方法,将新产品和数量添加到数据库中。我被困在如何阻止用户向数据库添加重复条目。 如果用户输入数据库中已存在的名称,程序应显示错误消息并再次显示主菜单。程序不应要求用户再次输入数据。该计划不应取代现有的条目。 提前谢谢!

public static void addData() {
    try (Connection conn = DriverManager.getConnection(db_url, user, password)) {

        String product = stringInput("Please enter the name of the product to store in inventory");
        int quantity = intInput("Please enter the quantity of the product");

        String addProduct = "INSERT INTO inventory VALUES (?,?)";
        PreparedStatement insertProduct = conn.prepareStatement(addProduct);

        insertProduct.setString(1, product);
        insertProduct.setInt(2, quantity);

        insertProduct.executeUpdate();
        conn.close();

        } catch(SQLException sqle){
            sqle.printStackTrace();
            System.exit(-1);
        }


    }

3 个答案:

答案 0 :(得分:1)

您可以在数据库中定义UNIQUE约束。然后,如果添加重复条目,它将抛出SQLIntegrityConstraintViolationException。捕获异常并处理应用程序中的错误。

可能不适用于您,但仅为了您的信息spring-data公开org.springframework.dao.DataIntegrityViolationException以实现相同目标。当遇到相同的问题时,spring-data会包装下面的异常并重新抛出DataIntegrityViolationException,以便客户端可以使用@ControllerAdvice在错误处理方面内处理它们。

答案 1 :(得分:0)

您必须首先查询库存表以检查产品名称是否已存在,如此

"从库存中选择i.id,其中name =?"

然后用if子句检查查询是否有结果,如果为true则执行所需操作,如show error ...

答案 2 :(得分:0)

在这种情况下,在表中创建一个id列,该列应该是唯一的或主键。并处理异常SQLIntegrityConstraintViolationException以在应用显示屏上显示错误消息。