【发布时间】:2015-01-19 19:33:49
【问题描述】:
我有一个 java 应用程序,可以将记录从文本框中插入到数据库中。问题是当我点击添加时,它会出现以下错误:
com.microsoft.sqlserver.jdbc.SQLServerException:违反主键约束“PK__customer__A1B71F90E76B7658”。无法在对象“dbo.customer”中插入重复键。重复键值为 (5)
我的表中没有重复,我不明白该怎么做。这是我第一次遇到这个错误。我的数据库中没有列允许 null 和 cust_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