Java 如何防止用户向MySQL数据库中添加重复条目?

Java 如何防止用户向MySQL数据库中添加重复条目?,java,mysql,database,Java,Mysql,Database,我正在使用Java开发一个库存数据库程序。我编写了一个向数据库添加新产品和数量的方法。我一直在思考如何防止用户向数据库中添加重复条目。 如果用户输入的名称已存在于数据库中,程序应显示错误消息并再次显示主菜单。程序不应要求用户再次输入数据。程序不应替换现有条目。 提前谢谢 public static void addData() { try (Connection conn = DriverManager.getConnection(db_url, user, password)) {

我正在使用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);
        }


    }

您必须首先查询库存表,以检查产品名称是否已经存在,类似这样

“从清单中选择i.id,其中名称=?”


然后用if子句检查查询是否有结果,如果为true,则执行任何需要的操作,如showererror…

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


可能不适用于您,但仅供参考
spring数据
公开了
org.springframework.dao.DataIntegrityViolationException
,以实现相同的功能。当遇到相同的问题时,spring数据包装下面的异常并重新抛出一个
DataIntegrityViolationException
,以便客户端可以使用
@ControllerAdvice

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

您可以在输入新数据之前搜索整个数据库。如果找到了,您可以将其保留最可靠的方法是在数据库级别使用
唯一的
约束。所有其他措施都会受到影响。使用密钥限制重复条目,如使用唯一。非常感谢!这是非常有帮助的!非常感谢你的帮助,我成功了!