Problem mit Insert in zwei Tabellen

werdas34

Bekanntes Mitglied
Hallo,
ich soll eine Methode schreiben, die Werte in zwei Tabellen schreibt.
Die Querys wurden mit der Datenbank in Postgres getestet und liefern, das gewünschte Ergebnis.
Jedoch wenn ich es über mein Programm laufen lasse, dann werden nur die Werte in die erste Tabelle richtig eingefügt, in der zweiten passiert garnichts. Es wird weder eine Exception geworfen noch tritt ein anderer Fehler auf.

Code:
    public void bestellen() throws Exception {
        Scanner read = new Scanner(System.in);

        System.out.print("Kundenname:");
        String kunde = read.nextLine();
        System.out.print("Warenname:");
        String ware = read.nextLine();
        System.out.print("Anzahl der bestellten Ware:");
        int anzahl = read.nextInt();

        try {
            Statement stmt = con.createStatement();

            String query1 = " insert into bestellung(bestid, datum, status, kundid) "
                    + " select nextval('bestellid'), CURRENT_DATE, 0, kundeid from kunde " + " where kname = '" + kunde
                    + "' ;" + " insert into enthaelt(bestid, anzahl, warenid) " + " select currval('bestellid'), "
                    + anzahl + ", warenid from ware " + " where bezeichnung = ' " + ware + "' ";
            stmt.executeUpdate(query1);

        } catch (SQLException e) {
            System.out.println("SQLException:");
            while (e != null) {
                System.out.println("SQLState:" + e.getSQLState());
                System.out.println("Message:" + e.getMessage());
                System.out.println("ErrorCode:" + e.getErrorCode());
                e = e.getNextException();
            }
        }
    }

Das was ich als problematisch ansehe ist, das wenn ich dies in Postgres teste, ich beide insert gleichzeitig einfügen muss, denn sonst wird der Wert für currval('bestellid') im zweiten insert nicht gefunden. (currval('bestellid') bezieht sich auf nextval('bestellid') vom ersten insert)

Ich habe nuun schon bisschen rumprobiert, wie ich es schaffe beide inserts gleichzeitig einzufügen. Jedoch nicht wirklich was brauchbares hinbekommen.

Habt ihr Lösungsvorschläge?

Danke.
mfg werdas34
 
Du musst die beiden INSERTs trennen. Das sollte auch kein Problem darstellen, da lt. PostgreSQL-Doku nextval() nur innerhalb der gleichen Session aufgerufen worden sein muss.

Abgesehen davon: verwende PreparedStatement und try-with-resources.
 
Du musst die beiden INSERTs trennen.
Meinst du so ?
Code:
            String query1 = " insert into bestellung(bestid, datum, status, kundid) "
                    + " select nextval('bestellid'), CURRENT_DATE, 0, kundeid from kunde " + " where kname = '" + kunde
                    + "' ";
            String query2 =  " insert into enthaelt(bestid, anzahl, warenid) " + " select currval('bestellid'), "
                    + anzahl + ", warenid from ware " + " where bezeichnung = ' " + ware + "' ";
            stmt.executeUpdate(query1);
            stmt.executeUpdate(query2);
Funktioniert nämlich auch nicht. Hatte ich am Anfang.

Abgesehen davon: verwende PreparedStatement und try-with-resources.
Es ist eine Aufgabe in der heißt es man soll ein einfaches Statement nutzen. Das PreparedStatement kam dann bei einer anderen Aufgabe dran.
 
Die zweite Tabelle(enthaelt) hat keine Einträge. Die erste (Bestellung) dagegen schon.
Und keine Exception in Java und sonst auch nichts.
 
Jap. Ich habe ja selber geschaut, ob ich ein Leerzeichen oder ähnliches falsch platziert habe, aber mir ist nichts aufgefallen.

Jedoch danke dir. 😀
 

Zurück
Oben