Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Fügen Sie Formulardaten über die JSP-Seite in zwei verschiedene Tabellen in der Datenbank ein

Lösung 1

Erstellen Sie zwei verschiedene Statement-Instanzen für Ihre beiden Einfügevorgänge.

Lösung 2

Wenn Sie eine einzelne Statement-Instanz wiederverwenden möchten, schließen Sie die Ressourcen in einem Finally Block. Eigentlich ist es immer eine gute Idee, die close-Anweisung finally einzufügen blockieren oder einfach try-catch-resource verwenden die jdk7+ zu bieten hat.

Ohne Bezug zu Ihren konkreten Fragen

  • Es wird dringend empfohlen, die Verwendung von Java-Code in der JSP-Datei zu vermeiden. Suchen Sie nach den Begriffen „jsp servlet mvc“.
  • Verwenden Sie PreparedStatement anstelle von Statement, um SQL-Injection-Angriffe zu vermeiden.

EDIT für Lösung 1:

In Ihrem ersten Try-Block:
Unter Statement myStatement = myConnection.createStatement();
add Statement myStatementTwo = myConnection.createStatement();

In Ihrem zweiten Versuchsblock:
ändern Sie myStatement.executeUpdate(sqlString);
zu myStatementTwo.executeUpdate(sqlString);

Fügen Sie einen letzten Block für Ihren ersten Versuchsblock hinzu und schließen Sie dort alle Ihre Ressourcen. Das Bearbeiten Ihres Codes ist so ziemlich dasselbe wie das Neuschreiben von allem von Grund auf, es wird Ihnen am meisten nützen, wenn Sie das selbst tun können.

BEARBEITEN, nachdem OP HTML-Code und Datenbank bereitgestellt hat

Ihre Dest_has_Categories Dest_idDest der Tabelle ist ein auto_increment -Spalte, aber es ist auch ein Fremdschlüssel, der auf Dest verweist Primärschlüssel von idDest . Die Fremdschlüssel der Referenztabelle (gemeinsame Tabelle) sollten nicht sei auto_increment. Es treten Probleme auf, wenn der vom DBMS generierte automatisch inkrementierte Wert nicht in der Referenztabelle vorhanden ist.

Bitte machen Sie die Fremdschlüssel nicht auto_increment und beim Einfügen in die Referenztabelle Dest_has_Categories , fügen Sie bitte vorhandene Kategorien ein 's id und Dest 's ID.

Wenn Sie Ihren Code ändern, stellen Sie außerdem sicher, dass Sie auch meine Lösung 2 als Best Practice verwenden.