# Eclipse mit Heidisql



## kirito123 (22. Jun 2021)

Hallo ich hab ein Problem,

ich habe drei klassen Gui, Fachklasse und DBZugriff.
auf der Gui hab ich meine Oberfläche Programmiert die mit DBZugriff agiert.
auf DBZugriff hab ich die Verbindung zur Heidisql aufgebaut.
Nun habe ich folgendes Problem: Die DB ist erfolgreich verbunde. ich hab mir das so vorestellt das wenn ich auf der oberfläche name,vorname u.s.w eintrage und auf den button klicke dass auf der Datenbank die daten gespeichert werden. Das funktioniert bis jetzt auch aber das Problem ist das auf der Datenbank die die felder leer bleiben obwohl ich auf der oberfläche name u.s.w eingetragen habe ich komm nicht darauf warum auf der Datenbank die felder leer bleiben,wo der fehler ist. Hoffe auf hilfe


----------



## Barista (22. Jun 2021)

Ich würde Dir vorschlagen, die Texte, welche Du dem PreparedStatement übergibst, mal mit System.out.println auszugeben.

Ansonsten in diesem Sinne entweder debuggen (IDE benutzen) oder schrittweise die Zwischenergebnisse ausgeben um den Fehler einzugrenzen.

Der Code sieht ansonsten gut aus.


----------



## Barista (22. Jun 2021)

[CODE lang="java" title="aus OpenDB"]            try {
                Class.forName("com.mysql.cj.jdbc.Driver");
            } catch (ClassNotFoundException e) {
                System.out.println("Verbindung erfolgreich" + e);
                System.out.println("SQLException: " + e.getMessage());
                e.printStackTrace();
            }
[/CODE]
Das ist falsch, wenn eine Exception auftrat, ist die Verbindung sicher nicht erfolgreich.


----------



## LimDul (22. Jun 2021)

Ein Commit fehlt mir da im Code, evtl. fehlt einfach das


----------



## kneitzel (22. Jun 2021)

Also Commit dürfte vermutlich nicht fehlen, denn per default ist auto commit ja gesetzt (Und ein setAutoCommit(false); wird er uns hoffentlich nicht vorenthalten haben!). Und dann würde es auch gar keine Veränderungen geben, aber es wurden ja Datensätze eingefügt (auch wenn diese leer sind).

Ich finde den Code aber extrem dubios:
- wieso sind die Variablen alle static?
- in der DB_Zugriff Klasse sehe ich die ganzen Variablen nicht: txtn, txtvn, txtgd, ... - Was für Variablen sind das? vermutlich aus der GUI Klasse von der Du erbst ...
- Dann wird da überall getText() aufegrufen - also vermutlich werden das Controls sein - und damit ist da null Trennung. Ein Datenbank Layer das die Controls kennt? 

Mein Verdacht hier ist:
- Du hast eine Instanz von GUI. Die ist sichtbar und in die Controls dieser Klasse trägst Du dann alle Daten ein.
- Dann hast Du eine Instanz von DB_Zugriff. Damit hast Du eine zweite Instanz, die nicht sichtbar ist. Und die controls dort sind alle leer.

Was ist eine mögliche Lösung (so ich Recht haben sollte):
a) Nimm bei DB_Zugriff das extends GUI raus!
b) übergib der Methode SaveToDatabase die GUI instanz und gib der entsprechende Getter um die Daten zu holen.
c) In der Methode holst Du die Daten dann von der GUI Instanz.

Noch besser: Du erstellst eine weitere Klasse "Eintragen" (Was für ein Name soll das sein? Da sollte doch ein Vernünftiger Name sein. Was trägst Du denn da ein?) mit den entsprechenden Feldern mit Getter/Setter und in der GUI erstellst Du eine Instanz dieser Klasse und SaveToDatabase bekommt dann diese sogenannte Entity übergeben -> Damit kennt Dein DataLayer nur die Entity und nicht die GUI.


----------



## kirito123 (23. Jun 2021)

Hallo, 
ja ich habe eine instanz in der gui klasse damit ich auf die methode zugreifen kann.
Vielen Dank für die schnelle Hilfe, ich werde es nachher umsetzen und mich wieder melden


----------



## kirito123 (23. Jun 2021)

Die datenbanktabelle heisst eintragen daher der name


----------



## kirito123 (24. Jun 2021)

Habe es geschafft, die Datenbank speichert nun die daten. vielen Dank für die Hilfe. Habe das extends gui entfernt, in der savetoDatabase methode parameter übergeben mit strings und in der gui aufrufen lassen. Nun funktioniert alles


----------

