SqlException beim Insert in MySQL DB mittels JDBC

XesperantoX

Mitglied
Hallo zusammen!

Ich verzweifle gerad an einem MySQL - JDBC Problem und weder die Suche im Forum noch Google konnten mich bisher auf die richtige Spur bringen...

Prinzipiell geht es darum das ich ein Insert-Statement habe, das per JDBC eine Tabelle in meiner MySQL (5.037) DB füllen soll. Einer der Werte ist vom Typ int und ist ein Fremdschlüssel einer anderen Tabelle. Mit dem Query Browser von MySQL funktioniert der Insert problemlos. Mit JDBC bekomme ich aber immer eine SqlException zurück:

Code:
ERROR [main] (MySqlQPruefungDAO.java:230) - Fehler beim updaten der Datenbank: Cannot add or update a child row: a foreign key constraint fails (`dokumentverwaltung3/qpruefung`, CONSTRAINT `qpruefung_ibfk_2` FOREIGN KEY (`idPruefungsart`) REFERENCES `pruefungsart` (`idPruefungsart`) ON DELETE NO ACTION ON UPDATE NO ACTION) idPrüfungsart =4

Soweit das Problem. Der Fehler ist soweit klar, ich kann keinen Dartensatz eintragen wenn nicht bereits in der anderen Tabelle ein entsprechender Wert vorhanden ist, dass ist aber nicht das Problem, alle Werte sind vorhanden und der Wert des PreparedStatements wird auch richtig gesetzt.

Meine Vermutungen wären nun:

a.) Es liegt an den MySQL Constraints: In der Tabelle in der ich den Fremdschlüssel habe ist für diesen definiert das er weder bei "on update" noch bei "on delete" irgendwas machen soll. Die Tabellen sind vom Typ InnoDB

b.) Es liegt an meinen AutoCommit-Einstellungen auf der Java Seite Ich hab da was bei Google gesehen aber konnte es nicht so richtig deuten. Könnte es bei einem PreparedStatement denn an so etwas liegen? Bei mir ist AutoCommit deaktiviert also false.


Wäre super wenn mir jemand einen Tipp hätte. Ich hab jetzt extra erstmal keinen Code gepostet, falls jemand aber irgendwas an Tabellen oder Codeschnippseln bräuchte würd ich sie natürlich gern nachreichen.

Grüße
Sascha
 
Kann es sein, dass du das Autocommit noch an hast?
Setz mal auf der Connection das Autocommit auf false und commite die Transaktion manuell.

Gruß
Ollie
 
Hy Ollie,

AutoCommit ist aus, ist bei mir in allen DAOs ausgestellt. Es funktioniert auch in anderen DAOs mit den Fremdschlüsselbeschränkungen, nur in dieser Klasse bzw. bei den beiden Tabellen ist der Wurm drin.
Dadurch das es sonst klappt denke ich das der Fehler im Bereich der MySQL Constraints liegt (in diesem Fall soll nichts geschehen), oder aber eher am PreparedStatement. :confused:

Grüße
Sascha
 
Zurück