在 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.
我有一个 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.