Datenbankeinträge persistieren

Kirby.exe

Top Contributor
Wir haben die Aufgabe ein Java Programm mit JDBC für unsere Postgres Datenbank zu schreiben und haben ein "Code Template" mit den Methodensignaturen bekommen. Ich habe fast alle Methoden interpretieren können und auch bewältigen können. Nur hänge ich jetzt gerade bei der Methode persist(Connection c){} fest :( Ich verstehe nicht wirklich was genau ich hier tun soll...Es stehen ein paar Kommentare des Profs drin:

// UPDATEs user with ID
// INSERTs user without ID and gets ID (Statement.getGeneratedKeys(), RETURN_GENERATED_KEYS)
// returns persisted Actor

Die Instanzvariablen und Konstruktoren sind die folgenden:

Java:
class DBActor {
    @Override
    public String toString() {
        return "DBActor [actor_id=" + actor_id + ", first_name=" + first_name + ", last_name=" + last_name
                + ", is_persisted=" + is_persisted + "]";
    }

    final Optional<Integer> actor_id;
    final String last_name;
    final String first_name;
    final boolean is_persisted;

    public DBActor(String first_name, String last_name) {
        this.actor_id = Optional.empty();
        this.first_name = first_name;
        this.last_name = last_name;
        this.is_persisted = false;
    }

    public DBActor(Integer actor_id, String first_name, String last_name, boolean is_persisted) {
        this.actor_id = Optional.of(actor_id);
        this.first_name = first_name;
        this.last_name = last_name;
        this.is_persisted = is_persisted;
    }
}
 

Barista

Top Contributor
Als erstes musst Du eine Datenbank auf Deinem Rechner installieren.
Eventuell geht was mit Containern, nicht mein Gebiet.
Als Alternative gibt es auch Datei-basierte SQL-DBs wie HSQL.
Beim JDK war mal eine Zeitlang eine Datenbank dabei (weiss nicht, ob die aktuell noch dabei ist).

Tabellen Anlegen kannst Du schon (andere Postings).

Dann Verbinden, dafür gibt es Beispiele im Netz.

Dann connection.createStatement oder createPreparedStatement.

Findet man auch.

Als letztes statement.execute().
 
K

kneitzel

Gast
Also vom Verständnis her macht persist doch nichts anderes:
Wenn die ID gesetzt ist, dann wird auf der übergebenen Connectionein Update durchgeführt.
Wenn die ID nicht gesetzt ist, wird ein INSERT gemacht und die ID gesetzt.
In beiden Fällen dürfte am ende noch is_persisted noch auf true gesetzt werden.

Als erstes musst Du eine Datenbank auf Deinem Rechner installieren.
Als Alternative gibt es auch Datei-basierte SQL-DBs wie HSQL.
Er schreibt doch explizit, dass dies für "ihre Postgresql Datenbank" ist. Daher wird er diese Datenbank garantiert schon haben und da ist HSQL und Co garantiert keine Alternative. Die Probleme von ihm dürften eher ein reines Verständnis-Problem sein, was zu tun ist und weniger, wie es zu tun ist :)
 

Kirby.exe

Top Contributor
Also vom Verständnis her macht persist doch nichts anderes:
Wenn die ID gesetzt ist, dann wird auf der übergebenen Connectionein Update durchgeführt.
Wenn die ID nicht gesetzt ist, wird ein INSERT gemacht und die ID gesetzt.
In beiden Fällen dürfte am ende noch is_persisted noch auf true gesetzt werden.

Ahh ich verstehe und im zweiten Fall soll dann einfach eine Auto Generierte ID zugewiesen werden :)

Er schreibt doch explizit, dass dies für "ihre Postgresql Datenbank" ist. Daher wird er diese Datenbank garantiert schon haben und da ist HSQL und Co garantiert keine Alternative. Die Probleme von ihm dürften eher ein reines Verständnis-Problem sein, was zu tun ist und weniger, wie es zu tun ist :)
Genau so ist es xD Habe eine Postgresql Instanz in einem Docker Container local laufen :)
 

Kirby.exe

Top Contributor
Eine Verständnisfrage ist mir noch gekommen xD Ich soll noch eine Methode public static remove(Connection c) schreiben, aber irgendwie verstehe ich nicht woher ich den Input dazu nehmen soll...Also die Methode bekommt kein DBActor übergeben und ist static :( Leider darf ich ja keine Signaturen ändern :( Gibt es da nen Trick an die ID zu kommen?
 

mihe7

Top Contributor
Ergänzender Hinweis (ich weiß nicht, ob Du das für die Aufgabe benötigst): wenn Du automatisch erzeugte Schlüssel verwendest, kannst Du das Statement mit RETURN_GENERATED_KEYS erzeugen und Dir diese per Statement#getGeneratedKeys() abrufen, um die ID des Objekts zu setzen.
 

Ähnliche Java Themen

Neue Themen


Oben