重复主键验证

时间:2016-08-29 11:04:23

标签: java sql

我正在构建一个java项目。我想检查一下我的表中是否已存在主键。例如,我有以下代码:

private void AddProductActionPerformed(java.awt.event.ActionEvent evt) 
{                                           
    String query="INSERT INTO Products(Pro_Id ,Pro_Name,Pro_Price,Pro_Quantity,Pro_Supplier_id)VALUES ('"+Pro_Id.getText()+" ','"+Pro_Name.getText()+" ','"+Pro_Price.getText()+" ','"+Pro_Quantity.getText()+" ','"+Pro_Supplier_id.getText()+" ') ";
    executeSQLQuery(query,"Inserted");
} 

如何获得一条消息,告诉我如果主键已经存在则更改主键的输入?

4 个答案:

答案 0 :(得分:1)

您可以将代码放在try catch块中。 内部catch块检查SQLException

public static final int MYSQL_DUPLICATE_PK = 1062; // Replace 1062 with exception no. you are getting in case it is different for different    database

try{
    String query="INSERT INTO Products(Pro_Id  ,Pro_Name,Pro_Price,Pro_Quantity,Pro_Supplier_id)VALUES ('"+Pro_Id.getText()+" ','"+Pro_Name.getText()+" ','"+Pro_Price.getText()+" ','"+Pro_Quantity.getText()+" ','"+Pro_Supplier_id.getText()+" ') ";
    executeSQLQuery(query,"Inserted");
} catch(SQLException e){
if(e.getErrorCode() == MYSQL_DUPLICATE_PK ){
   System.out.println("Primary key already used");
}
}

答案 1 :(得分:0)

  

如何收到一条消息,告诉我更改主要条目   密钥,如果它已经存在?

确保在定义表结构时将Pro_Id标记为PRIMARY KEY,这将确保此行为,如果您尝试插入重复值,则会抛出错误。

答案 2 :(得分:0)

如果您尝试使用代码并且密钥已存在,则会出现错误。根据此错误,您的程序在正常流程中工作不是一个好主意,因为异常在性能方面总是很昂贵。您应该做的是在尝试插入之前检查主键是否已存在。这可以通过执行SELECT查询来完成。

SELECT 1 FROM Products WHERE Pro_Id = :yourDesiredPk;

当查询结果不为空时,意味着它已经存在。

更好的想法是考虑使用序列并使用下一个值即自动增量,在谷歌(What is a sequence (Database)? When would we need it?)上查看。这样你可以避免重复PK问题。但也许你的PK不是一个数字,并且背后有一些商业逻辑,在这种情况下,序列不是一个选项。

答案 3 :(得分:0)

在插入记录之前,做一件事就是count(*),如果count是0那么然后插入相同的show popup用于重复查询。