我刚刚开始使用SQL,并在运行我的文件时发生此问题。 表Artikel中的主键是artikelNr,而表Assortiment有一个多重键,即artikelNr和winkelNaam。我们已经在互联网上搜索,但没有找到任何有用的信息。提前致谢!外键约束失败,尽管插入正确
这是Java我们的SQL代码:
public void addArtikel(String artikelNr, String artikelNaam, double prijs, double aantalBonuspunten, double aantalBonuspuntenNodig,int minAantalStuks, double minBedrag)
{
Database db = new Database();
Connection con = null;
try
{
con = db.getConnection();
Statement stmt = con.createStatement();
String sql = "INSERT INTO Artikel\n" +"VALUES(‘" + artikelNr + "’, ‘" + artikelNaam + "’, " + prijs + ", " + aantalBonuspunten + ", " + aantalBonuspuntenNodig + ", " + minAantalStuks + "," + minBedrag + ");";
stmt.executeUpdate(sql);
con.close();
}
catch(Exception ex)
{
try { con.close(); } catch(Exception ex2){};
System.out.println(ex.getMessage());
}
}
public void addAssortiment(String artikelNr, String winkelNaam)
{
Database db = new Database();
Connection con = null;
try
{
con = db.getConnection();
Statement stmt = con.createStatement();
String sql = "INSERT INTO Assortiment\n" +"VALUES('" + artikelNr+ "', '" + winkelNaam + "');";
stmt.executeUpdate(sql);
con.close();
}
catch(Exception ex)
{
try { con.close(); } catch(Exception ex2){};
System.out.println(ex.getMessage());
}
}
这是我们的Java代码:
public void artikelToevoegen(String winkelnaam)
{
String artikelNr = io.readString("Geef de barcode van het artikel dat u wilt toevoegen: ");
while(artikelNr.length() != 13)
{
artikelNr = io.readString("Ongeldige barcode. Een barcode bestaat uit 13 karakters. Probeer opnieuw: ");
}
String naam = io.readString("Geef naam artikel");
double prijs = io.readDouble("Geef prijs artikel");
double aantalBonuspunten = io.readDouble("Geef het aantal punten per artikel (niet per euro van de prijs!)" + "\ndie men krijgt bij aankoop van het artikel (als de vereisten voldaan zijn)."
+ "\nDe punten moeten tussen 0,25 en 2 per euro van de prijs liggen."
+"\nIndien dit aantal 0 is typ null."
+ "\nIndien het artikel niet aan deze vereisten voldoet, wordt het automatisch verwijderd.");
int minAantalStuks = io.readInt("Geef het minimum aantal stuks dat gekocht moet worden van het artikel" +"\n eer men de bijhorende punten verkrijgt, indien er geen vereist aantal is typ 1");
double aantalBonuspuntenNodig = io.readDouble("Geef het aantal punten per artikel (niet per euro van de prijs!) die nodig zijn om het artikel gratis te verkrijgen (indien aan de voorwaarden voldaan is)."
+ "\n De punten moeten tussen 0,25 en 2 per euro van de prijs liggen." + "\n Indien dit aantal 0 is typ null." +
"\n Indien het artikel niet aan deze vereisten voldoet, wordt het automatisch verwijderd.");
double minBedrag = io.readDouble("Geef het minimum bedrag dat van het artikel aangekocht moet worden eer men het artikel met punten kan verkrijgen," + "\n indien er geen minimumbedrag is geef de eenheidsprijs.");
db.addArtikel(artikelNr, naam, prijs, aantalBonuspunten, aantalBonuspuntenNodig, minAantalStuks, minBedrag);
db.addAssortiment(artikelNr, winkelnaam);
int keuze = io.readInt("Wilt u nog een artikel toevoegen?" +
"\n1)Ja" + "\n2)nee");
while(keuze<1||keuze>2)
{
keuze = io.readInt("Ongeldige keuze, probeer opnieuw" + "\nWilt u nog een artikel toevoegen?" +
"\n1)Ja" + "\n2)nee");
}
while(keuze != 2)
{
switch(keuze)
{
case 1: artikelToevoegen(winkelnaam);
break;
}
}
}
这是我们的错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '‘1231231231231’, ‘cola can’, 1.2, 1.2, 1.25, 1,5.0)' at line 2 Cannot add or update a child row: a foreign key constraint fails (
BINFG21
.Assortiment
, CONSTRAINTAssortiment_ibfk_3
FOREIGN KEY (artikelNr
) REFERENCESArtikel
(artikelNr
) ON DELETE CASCADE ON UPDATE CASCADE) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '‘Delhaize’)' at line 3
非常感谢!我们发现错误! – user3083991
你可以请你发布你解决它的方式吗?这将有助于他人理解。 – rulebot
出错的主要原因是apotrophe的差异。我们用马克来实现,但是我们的程序不能识别这些撇号。但是还有很多其他的错误。 – user3083991