gpt4 book ai didi

mysql - 尽管插入正确,但外键约束失败

转载 作者:行者123 更新时间:2023-11-30 23:09:25 25 4
gpt4 key购买 nike

我刚开始使用 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, CONSTRAINT Assortiment_ibfk_3 FOREIGN KEY (artikelNr) REFERENCES Artikel (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

最佳答案

我还没有发现错误,但请查看 SQL 注入(inject) (http://en.wikipedia.org/wiki/Sql_injection) 和 PreparedStatements。您的应用程序请求受到攻击,它会在最轻微的无效输入时崩溃。

Prepared Statement 还有助于避免这些丑陋的语法错误,因为它们具有更好的可读性。

回到您的错误:看起来第一个语句失败,第二个语句确实属于由于第一个错误而未插入的记录。查看用于SQL的String变量的内容,并将它们插入到sql-Tool(如phpmyadmin)中以检查它是否可以执行。

关于mysql - 尽管插入正确,但外键约束失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20478536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com