我正在构建一个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");
}
如何获得一条消息,告诉我如果主键已经存在则更改主键的输入?
答案 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用于重复查询。