在 java 和 SQL 中使用插入查询时出现主键约束错误

Primary Key Constraint error while using insert query in java and SQL

我有一个 java 应用程序可以将记录从文本框插入数据库。问题是当我点击添加时出现以下错误:

com.microsoft.sqlserver.jdbc.SQLServerException: Violation of PRIMARY KEY constraint 'PK__customer__A1B71F90E76B7658'. Cannot insert duplicate key in object 'dbo.customer'. The duplicate key value is (5)

我的 table 中没有重复项,我不知道该怎么做。这是我第一次遇到这个错误。我的数据库中没有列允许 null 并且 cust_id 是另一个 table 中的外键。这是我的代码

stmt = conn.createStatement(); 
String sql = "insert into customer (cust_id, cust_name, father_name, birth_date, CNIC, city, card_num, acc_num, bank_name, address, email, ph_num) values ( " + String.valueOf(txtcust_id1.getText()) + ",'" + txtcust_name1.getText()
+ "','" + txtf_name1.getText() + "','" + txtb_date1.getText() + "','" + txtcnic1.getText() + "','" + txtcity1.getText() + "','" + txtcard_num1.getText() + "','" + txtacc_num1.getText() + "','" + txtb_n1.getText() + "','" + txtadd1.getText() + "','" +
txtemail1.getText() + "','" + txtph_num1.getText() + "' )"; 

stmt.executeUpdate(sql); 

System.out.println("Successful"); 

int rowsAffected = stmt.executeUpdate(sql); 

String msg = "Insert Query Execution Failed"; 

if(rowsAffected > 0) { 
   JOptionPane.showMessageDialog(null, "Query Successful"); 
} 
else { 
   JOptionPane.showMessageDialog(this, msg, "Execution Alert", JOptionPane.INFORMATION_MESSAGE); 
}

我不能使用参数查询,因为我似乎无法处理其中的日期和金钱。

您的代码:

stmt.executeUpdate(sql); 
System.out.println("Successful"); 
int rowsAffected = stmt.executeUpdate(sql); 

所以它执行相同的 SQL,包含一个硬编码的主键,两次。这就是你得到这个例外的原因。

顺便说一句,您的代码非常脆弱(只需尝试在您插入的其中一个字符串中添加一个撇号),并且是 SQL 注入攻击的良好候选者。了解 prepared statements.