Hallo,
Man muss also nach dem Insert zuerst fragen, ob der Insert überhaupt geklappt hat (also nicht gegen Contraints verstoßen hat) und dann den Schlüssel (z.B. Last_Insert_Id) abholen. Den kann man dann als Foreign Key für die nächste Tabelle verwenden.
Nun, solange der INSERT keine SQLException geworfen hat, hat er ja auch geklappt.
Insgesamt sollte man natürlich über den gesamten Vorgang der Insert-Kette eine transaktion legen, wenn das DBMS dies zulässt, damit die Integrität auf jeden Fall wiederhergestellt werden kann, wenn etwas schief gegangen sein sollte.
Das klingt interessant. Wie wird so etwas normalerweise bewerkstelligt? Ich bin mir jetzt nicht sicher, ob das bei mir sogar funktionieren würde, da der ganze Vorgang während einer offenen Pool Connection passiert:
con = DatabaseSingleton.getPoolConnection();
try {
stmt = con.createStatement();
// Hier die INSERT-Befehle.....
} catch (SQLException e) {
throw new DaoException(e);
}
DatabaseSingleton.closePoolConnection(con);
Da ich leider noch zu wenig über die internen Abläufe der DB-Interaktion mit Java weiß, bin ich nicht sicher, ob hier die Integrität bei auftretenden Fehlern, wie bspw ein Verbindungsausfall, auf jeden Fall gewährleistet bleibt.
Markus