2014-05-20 118 views
1

MySQL表 mysqltablesMySQL不能添加或更新子行,外键约束失败

这是我的查询将数据插入到数据库。

public void voegSpelerToe(Speler speler, String spelNaam) 
{ 

    PreparedStatement invoerSpeler; 
    Speler huidigeSpeler = null; 
    try 
    { 

     Connection connection = PersistentieController.getInstance().getConnection(); 

     invoerSpeler = connection.prepareStatement("INSERT INTO Speler " + "(naam, kleur, sector, aantalZilverstukken, Spel_naam) " + "VALUES (?, ?,?, ?, ?)"); 


     invoerSpeler.setString(1, speler.getNaam()); 
     invoerSpeler.setString(2, speler.getKleur()); 
     invoerSpeler.setInt(3, speler.getSector().getCode()); 
     invoerSpeler.setInt(4,speler.getKrediet()); 
     invoerSpeler.setString(5, spelNaam); 




     invoerSpeler.executeUpdate(); 


    } catch (SQLException sqlException) 
    { 
     sqlException.printStackTrace(); 
    } finally 
    { 
     // PersistentieController.getInstance().closeConnection(); 
    } 


} 

一切都有价值,所以我没有nullexeptions。

但是,当我要保存的数据我得到这个错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`projecteng62`.`speler`, CONSTRAINT `fk_Speler_Spel1` FOREIGN KEY (`Spel_naam`) REFERENCES `spel` (`naam`) ON DELETE CASCADE ON UPDATE CASCADE) 

我怎样才能外键插入数据。 首先它将数据保存到表格Spel 然后我需要将表格中的数据保存到speler中,但我遇到了外键出现问题。

如表SPEL:

  1. NAAM:Game12
  2. aantalTeSPelenRondes:2

表Speler:

  1. NAAM:PLAYER1
  2. kleur:绿色
  3. 部门:2
  4. aantalZilverStukken:10

  5. Spel_Naam:game12 Spel_naam必须是相同的NAAM表的SpeI

回答

0

这是告诉你,它期待Spel_Naam的内容speam naam属性存在于某一行,但它不存在。

要完全弄清楚这个问题,我还需要看看你在哪里插入到拼写。

但在本例中输入您提供

naam: Game12 

Spel_Naam: game12 

有一个问题,因为一个是大写,而另一个则不是。如果这实际上是如何设置数据的,那么这可能是您的问题。但看起来你有正确的想法,你需要先插入naam,然后插入Spel_Naam。

+0

Okey似乎更新表格Speler然后Spel。现在我更新第一个Spel和Speler。我的错,没有看到,我认为它是在正确的顺序 – user3639969

相关问题