Я столкнулся с этой проблемой. INSERT на таблице «PURCHASEDETAILS» вызвал нарушение ограничения внешнего ключа «SQL141108214008671» для ключа (P0003). Заявление было отменено. Кажется, я не могу найти проблему.Нарушение ограничения внешнего ключа
CREATE TABLE STOCKS (
stockID VARCHAR(5) not null,
stockName VARCHAR(50),
stockPrice DOUBLE,
stockDescrp VARCHAR(100),
stockQty INTEGER,
PRIMARY KEY (stockID)
);
INSERT INTO STOCKS VALUES ('S0001', 'Vitamin C For Kids', 12.90, 'Vitamin C for kids under age of 8.', 100);
INSERT INTO STOCKS VALUES ('S0002', 'Syntha-6 Whey Protein', 180.00,'Ultra lean muscle protein for healthy adults over 18 years old.', 100);
INSERT INTO STOCKS VALUES ('S0003', 'Serious Mass', 190.00,'Extra calories that allows anyone to increase mass efficiently.', 100);
INSERT INTO STOCKS VALUES ('S0004', 'Vitamin C Elite', 15.50, 'Vitamin C for everyone.', 100);
CREATE TABLE PURCHASE (
purchaseID VARCHAR(5) not null,
purchaseDate DATE,
memberID VARCHAR(5),
PRIMARY KEY (purchaseID),
FOREIGN KEY (memberID) REFERENCES MEMBERS(memberID)
);
INSERT INTO PURCHASE VALUES ('P0001','2014-10-23','S0001');
INSERT INTO PURCHASE VALUES ('P0002','2014-10-23','G0001');
CREATE TABLE PURCHASEDETAILS (
purchaseDetailID VARCHAR(7) not null,
purchaseID VARCHAR(5),
stockID VARCHAR(5),
OrderQty INTEGER,
PRIMARY KEY (purchaseDetailID),
FOREIGN KEY (purchaseID) REFERENCES PURCHASE(purchaseID),
FOREIGN KEY (stockID) REFERENCES STOCKS(stockID)
);
INSERT INTO PURCHASEDETAILS VALUES ('PD00001', 'P0001', 'S0001', 4);
INSERT INTO PURCHASEDETAILS VALUES ('PD00002', 'P0001', 'S0002', 10);
INSERT INTO PURCHASEDETAILS VALUES ('PD00003', 'P0002', 'S0003', 5);
Вот часть DA для вставки записи:
public void insertRecord(Purchase purc){
String queryStr = "INSERT INTO "+ tableName +" VALUES (?,?,?,?)";
try{
stmt = conn.prepareStatement(queryStr);
stmt.setString(1,purc.getPurchaseDetailsID());
stmt.setString(2,purc.getPurchaseID());
stmt.setString(3, purc.getStockID());
stmt.setInt(4, purc.getQuantity());
stmt.executeUpdate();
}
catch (SQLException ex){
JOptionPane.showMessageDialog(null,ex.getMessage(),"ERROR",JOptionPane.ERROR_MESSAGE);
}
}
Вот часть пользовательского интерфейса:
if(e.getSource() == jbtCreate)
{
String stockID = jTF.getText();
String quantity = jTF2.getText();
Purchase purc = new Purchase();
if(stockID.isEmpty() || quantity.isEmpty())
{
JOptionPane.showMessageDialog(null,"Fields must not be empty","ERROR",JOptionPane.ERROR_MESSAGE);
}
else{
String pID = PID();
count = count +1;
String pDID = PDID(count);
int q = Integer.parseInt(jTF2.getText());
purc.setQuantity(q);
String sID= jTF.getText();
int quantityC = Integer.parseInt(jTF2.getText());
String priceStr = purcControl.selectPrice(sID);
double realPrice = Double.parseDouble(priceStr);
purc.setPurchaseDetailsID(pDID);
purc.setPrice(realPrice);
purc.setPurchaseID(pID);
purc.setQuantity(quantityC);
purc.setStockID(sID);
double price = purc.getPrice();
tableModel.addRow(new Object[]{pDID,sID,price,quantityC});
purcControl.addRecord(purc);
}
}
управления:
public void addRecord(Purchase purc){
purcDA.insertRecord(purc);
}
Домен:
public Purchase(String purchaseDetailsID,String purchaseID,String stockID,double price,int quantity)
{
this.purchaseDetailsID = purchaseDetailsID;
this.purchaseID = purchaseID;
this.stockID = stockID;
this.price = price;
this.quantity = quantity;
counter ++;
}
public String getPurchaseID(){
return purchaseID;
}
public void setPurchaseID(String u){
this.purchaseID = u;
}
public int getCounter(){
return counter;
}
public String getPurchaseDetailsID(){
return purchaseDetailsID ;
}
public double getPrice(){
return price;
}
public String getStockID(){
return stockID;
}
public int getQuantity(){
return quantity;
}
public void setPurchaseDetailsID(String r){
this.purchaseDetailsID = r ;
}
public void setPrice(double p){
this.price = p;
}
public void setStockID(String s){
this.stockID = s;
}
public void setQuantity(int q){
this.quantity = q;
}
Я не знаю, где проблема. Всякий раз, когда я вхожу, эта ошибка только что вышла.
вот что я пытаюсь сделать. Я пытаюсь ввести P0003 в таблицу, но, похоже, что-то это что-то нарушило. – user3900009
, когда вы выполняете этот оператор, каково значение tableName? – him
PurchaseDetails – user3900009