【问题标题】:Primary Key Constraint error while using insert query in java and SQL在 java 和 SQL 中使用插入查询时出现主键约束错误
【发布时间】:2015-01-19 19:33:49
【问题描述】:

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

com.microsoft.sqlserver.jdbc.SQLServerException:违反主键约束“PK__customer__A1B71F90E76B7658”。无法在对象“dbo.customer”中插入重复键。重复键值为 (5)

我的表中没有重复,我不明白该怎么做。这是我第一次遇到这个错误。我的数据库中没有列允许 nullcust_id 是另一个表中的外键。这是我的代码

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); 
}

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

【问题讨论】:

  • 没有重复,因为约束正好阻止您创建一个。您正在尝试插入一个已经存在的 PK (5),这会导致您得到异常。
  • 是的,我知道,但我的数据库是空的。里面没有一条记录。
  • 那么您可能在同一个事务中两次插入相同的值。该异常导致事务回滚,并使数据库为空。或者你没有使用你正在使用的数据库。
  • 好的,我将再次创建数据库,然后发布发生的情况
  • 不,什么?你的代码有一个错误。找到它。如果数据库告诉您正在插入一个已经存在的 PK,请相信它。这是真的。如果您希望我们帮助您找到代码中的错误,我们将需要您的代码。

标签: java sql-server database


【解决方案1】:

您的代码可以:

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

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

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

【讨论】:

  • 好的..我想这就是发生的事情..那么我如何设置标志以知道它是否成功?我知道准备好的陈述。但我不知道如何处理 setDate
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-15
  • 1970-01-01
  • 2012-07-18
  • 2016-11-13
  • 2015-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多