# Es werden keine Einträge in der Datenbank gemacht



## Kirby.exe (26. Jan 2020)

Also ich habe folgendes Problem, wenn ich versuche neue Einträge für die Datenbank zu machen, bleiben meine Zeilen alles auf Null(außer die ID), ich sehe ehrlich gesagt meinen Fehler nicht...Vielleicht sieht ja einer von euch den Fehler  Ich bedanke mich schonmal im voraus 

Hier ist der komplette Java Code für die DB:


```
package database;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

public class MainDatabase {
  
    /*===== when class is used through a objekt, table is checked and created =====*/
    public MainDatabase() throws Exception{
        createTable();
    }
  
    /*============ creates table ===============*/
    public static void createTable() throws Exception {
        try {
            Connection conn = getConnection();
            PreparedStatement create = conn.prepareStatement("CREATE TABLE IF NOT EXISTS login (id int NOT NULL AUTO_INCREMENT, username varchar(255), email varchar(255), password varchar(255), birthday varchar(255), mtrNr varchar(255),  PRIMARY KEY(id))");
            create.executeUpdate();
        }catch(Exception e) {
            System.out.println("Error when creating Table");
            e.printStackTrace();
        }
        finally{
            System.out.println("Table successfully created");
        }
    }
  
    /*============ adds entries to table ===============*/
    public void addEntries(String username, String email, String password, String birthday, String mtrNr) throws Exception {
        try {
            Connection conn = getConnection();
            PreparedStatement add = conn.prepareStatement("INSERT INTO login(username, email, password, birthday, mtrNr)VALUES(?,?,?,?,?)");
            add.setString(1, username);
            add.setString(2, email);
            add.setString(3, password);
            add.setString(4, birthday);
            add.setString(5, mtrNr);
            add.executeUpdate();
        }catch(Exception e) {
            System.out.println("Error when saving new Entry!");
            e.printStackTrace();
        }
    }
  
    /*============ deletes entries from table ===============*/
    public void deleteEntries(String email) throws Exception {
        try {
            Connection conn = getConnection();
            PreparedStatement delete = conn.prepareStatement("DELETE FROM login WHERE email = ?");
            delete.setString(1, email);
            delete.executeUpdate();
        }catch(Exception e) {
            System.out.println("Error when deleting Entrie");
            e.printStackTrace();
        }
    }
  
    /*============ fetches entries from table ===============*/
    public ArrayList<String> getEntries(String username, String password) throws Exception{
        try {
            Connection conn = getConnection();
            PreparedStatement getEntries = conn.prepareStatement("SELECT username, password FROM login");
            ResultSet result = getEntries.executeQuery();
          
            ArrayList<String> returnArray = new ArrayList<String>();
            while(result.next()) {
                System.out.println(result.getString("username") + " " + result.getString("password"));
                returnArray.add(result.getString("username"));
            }
            System.out.println("All records have been selected!");
          
            return returnArray;
        }catch(Exception e) {
            System.out.println("Error when loading Entries");
            e.printStackTrace();
        }
        return null;
    }
  
    /*============ sets up connection to SQL database ===============*/
    public static Connection getConnection() throws Exception{
        try {
            String driver = "com.mysql.cj.jdbc.Driver";
            String url = "jdbc:mysql://localhost:3306/UniDB?useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC";
            String username = "testuser";
            String password = "Test123456789";
            Class.forName(driver);
          
            Connection conn = DriverManager.getConnection(url, username, password);
            System.out.println("Connected");
            return conn;
        }catch(Exception e) {
            System.out.println("Connection Failed");
            e.printStackTrace();
        }
        return null;
    }

}
```

Bild vom Table:



Log der Datenbank:


----------



## mihe7 (26. Jan 2020)

Kirby_Sike hat gesagt.:


> ich sehe ehrlich gesagt meinen Fehler nicht...


Vielleicht steckt der Fehler ja an anderer Stelle, z. B. dort, wo MainDatabase genutzt wird...


----------



## Kirby.exe (26. Jan 2020)

mihe7 hat gesagt.:


> Vielleicht steckt der Fehler ja an anderer Stelle, z. B. dort, wo MainDatabase genutzt wird...


Kann ich auch eben schicken 


```
public void actionPerformed(ActionEvent e) {
                try {
                    MainDatabase data = new MainDatabase();
                    s_username = inputUsername.getText();
                    s_email = inputEmail.getText();
                    if(inputPassword.equals(inputPasswordConfirm)) {
                        s_pw = inputPassword.getText();
                    }else {
                        return;
                    }
                    s_Birthday = inputBirthday.getText();
                    s_MtrNR = inputMtrNR.getText();
                    data.addEntries(s_username, s_email, s_pw, s_Birthday, s_MtrNR);
                }catch(Exception k) {
                    
                }
```


----------



## LimDul (26. Jan 2020)

Mal ganz Banal - fehlt evtl. einfach ein Commit?


----------



## Kirby.exe (26. Jan 2020)

LimDul hat gesagt.:


> Mal ganz Banal - fehlt evtl. einfach ein Commit?


Ich bin mir zwar ehrlich gesagt nicht sicher, aber ich glaube nicht


----------



## TM69 (26. Jan 2020)

Kirby_Sike hat gesagt.:


> Ich bin mir zwar ehrlich gesagt nicht sicher, aber ich glaube nicht


Naja, schaden würde es ja nicht. Ich würde es ausprobieren, somit bist du auf der sicheren Seite das es daran nicht zusammenhängt.
Was mir noch einfällt, hast du den richtigen Treiber (nicht das du mySQL - Treiber angibst und Postgre verwendest), Port, Benutzername, Password angegeben?


----------



## tommysenf (26. Jan 2020)

Kirby_Sike hat gesagt.:


> }catch(Exception k) { }


Da brauch man sich dann auch nicht wundern wenn man Fehler nicht findet....


----------



## TM69 (26. Jan 2020)

Ergänzung:

hast du es erst einmal mit deinem Verbindungsstring und dem von MySQL - Documentation:

```
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

Connection conn = null;
...
try {
    conn =
       DriverManager.getConnection("jdbc:mysql://localhost/test?" +
                                   "user=minty&password=greatsqldb");

    // Do something with the Connection

   ...
} catch (SQLException ex) {
    // handle any errors
    System.out.println("SQLException: " + ex.getMessage());
    System.out.println("SQLState: " + ex.getSQLState());
    System.out.println("VendorError: " + ex.getErrorCode());
}
```
https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-usagenotes-connect-drivermanager.html 

probiert?

Was mir in deinem Code auffällt, bin mir jetzt nicht sicher - nicht nachgeschaut:

```
String driver = "com.mysql.cj.jdbc.Driver";
```
Das cj kommt mir irgendwie so spanisch vor.

Was auch sein kann, dass du einen für jconnector benutzt der gar nicht für deine MySQL Version benutzt werden kann / sollte.


----------



## Kirby.exe (26. Jan 2020)

TM69 hat gesagt.:


> Was mir in deinem Code auffällt, bin mir jetzt nicht sicher - nicht nachgeschaut:
> 
> ```
> String driver = "com.mysql.cj.jdbc.Driver";
> ...



Das könnte sehr gut der Fall sein...  Wait ich schaue eben nach welchen Connector ich benutze


----------



## Kirby.exe (26. Jan 2020)

BTW Also an der Connection liegt es glaube ich nicht, da er ja den table erstellt, er füllt diesen nur nicht


----------



## Kirby.exe (26. Jan 2020)

Vielleicht hilft euch das weiter  Ich benutze den Connector:



Also wenn ich den driver von dir verwende bekomme ich die folgende Fehlermeldung:

```
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
```

Ich denke der driver war schon richtig, nur ich habe vermutlich einen riesen Denkfehler


----------



## TM69 (26. Jan 2020)

tommysenf hat gesagt.:


> Da brauch man sich dann auch nicht wundern wenn man Fehler nicht findet....


@Kirby_Sike Ich würde erstmal etwas für die Ausgeben in den catch - Block schreiben.
Weil momentan ist das hier wohl eher raten. Vielleicht kommst du dann dem Fehler auf die Schliche.


----------



## mihe7 (26. Jan 2020)

An der Stelle spielt das keine Rolle, weil er in den Methoden die Exceptions schon behandelt.

Ich glaube, die Lösung liegt eher im Bereich des commits - konkret würde ich (auch unabhängig davon) das Statement mal schließen.


----------



## Kirby.exe (26. Jan 2020)

mihe7 hat gesagt.:


> An der Stelle spielt das keine Rolle, weil er in den Methoden die Exceptions schon behandelt.
> 
> Ich glaube, die Lösung liegt eher im Bereich des commits - konkret würde ich (auch unabhängig davon) das Statement mal schließen.


Also ich hatte mir in die Exception eine Out Print geschrien, er landet jedoch nicht im Catch, weshalb es vermutlich wirklich am Comit liegt...ich schaue mir das an wenn ich wieder zuhause bin


----------



## TM69 (26. Jan 2020)

mihe7 hat gesagt.:


> An der Stelle spielt das keine Rolle, weil er in den Methoden die Exceptions schon behandelt.


Ups, my fail. Habs übersehen


----------



## mihe7 (26. Jan 2020)

Der Code ist aber auch verwirrend: überall allgemeine Exceptions, dann per throws deklariert und in Wirklichkeit alles gecatched... 

@Kirby_Sike:
Unabhängig davon gilt natürlich, dass ein catch-Block prinzipiell nicht leer sein sollte. 

Vom Design her solltest Du die Connection nicht in MainDatabase herstellen, sondern der MainDatabase eine Connection mitgeben.


----------



## Kirby.exe (26. Jan 2020)

mihe7 hat gesagt.:


> Der Code ist aber auch verwirrend: überall allgemeine Exceptions, dann per throws deklariert und in Wirklichkeit alles gecatched...
> 
> @Kirby_Sike:
> Unabhängig davon gilt natürlich, dass ein catch-Block prinzipiell nicht leer sein sollte.
> ...


Ok dann werde ich das mal etwas umschreiben  Habe jetzt auch alle Catch Blocks gefüllt


----------



## Kirby.exe (26. Jan 2020)

Also ich habe mal alle Connections geclosed nach dem benutzen und jetzt geht er bei mir in den else block beim versuch Daten in die Datenbank einzutragen, da ich noch überprüfe ob die Passwörter übereinstimmen:


```
public void actionPerformed(ActionEvent e) {
                try {
                    MainDatabase data = new MainDatabase();
                    s_username = inputUsername.getText();
                    s_email = inputEmail.getText();
                    if(inputPassword.equals(inputPasswordConfirm)) {
                        s_pw = inputPassword.getText();
                    }else {
                        System.out.println("Wrong password");
                        return;
                    }
                    s_Birthday = inputBirthday.getText();
                    s_MtrNR = inputMtrNR.getText();
                    data.addEntries(s_username, s_email, s_pw, s_Birthday, s_MtrNR);
                }catch(Exception ex) {
                    System.out.println("Es konnte nichts hinzugefügt werden");
                }
            }
```

Das sind die Testwerte:


----------



## kneitzel (26. Jan 2020)

Also wenn Du prüfen willst, ob die Eingabe in zwei Feldern gleich ist, prüfst Du, ob die Felder gleich sind?

Das ist das, was der Code machen würde ...
`inputPassword.equals(inputPasswordConfirm)`

Also denkbar ist sowas ... mach einfach zwei Textfelder und überschreib equals .. aber viel Sinn macht das nicht wirklich in meinen Augen.

Und wie Du an den Text heran kommst, hast Du ja im if gezeigt - Also solltest Du doch eigentlich den Inhalt der Felder vergleichen können ...


----------



## mihe7 (26. Jan 2020)

Kirby_Sike hat gesagt.:


> if(inputPassword.equals(inputPasswordConfirm)) {


Ich kenn ja Deinen Code nicht, aber ist inputPasswordConfirm nicht das Textfeld? Dann müsste hier  inputPassword.equals(inputPasswordConfirm.getText()) stehen.

EDIT: @JustNobody war schneller und inputPassword wird vermutlich auch ein Textfeld sein: `inputPassword.getText().equals(inputPasswordConfirm.getText())`


----------



## Kirby.exe (26. Jan 2020)

mihe7 hat gesagt.:


> Ich kenn ja Deinen Code nicht, aber ist inputPasswordConfirm nicht das Textfeld? Dann müsste hier  inputPassword.equals(inputPasswordConfirm.getText()) stehen.
> 
> EDIT: @JustNobody war schneller und inputPassword wird vermutlich auch ein Textfeld sein: `inputPassword.getText().equals(inputPasswordConfirm.getText())`


Ich bin so blöd...xD warum passiert mir so ein scheiß xD Ich hatte gar nicht daran gedacht, dass ich erst wenn das if true ist, die Werte in einen String speichere


----------



## Kirby.exe (26. Jan 2020)

BTW funktioniert das eintragen in die Datenbank jetzt  Danke für die Hilfe


----------



## LimDul (26. Jan 2020)

Kleiner Tipp fürs nächste mal für die Selbsthilfe - debuggen.

Entweder mittels des in der IDE integrierten Debuggers (wenn möglich) oder mittels poor mans debugging (System.out.println einbauen).

Und dann folgende zwei Schritte solange wiederholen, bis man den Fehler hat:

1. Wird die Stelle, die nicht klappt (Hier das absetzen des Insert-Statements) aufgerufen? Wenn ja: Ab zu Schritt 2, wenn nein: Von wo wird sie aufgerufen und da wieder mit Schritt 1 beginnen.
2. Haben alle Variablen den erwarteten Wert? Wenn nein, wo werden sie gesetzt und da wieder mit Schritt 1 beginnen.

Dann findet mal solche Fehler recht schnell.


----------



## Kirby.exe (26. Jan 2020)

LimDul hat gesagt.:


> Kleiner Tipp fürs nächste mal für die Selbsthilfe - debuggen.
> 
> Entweder mittels des in der IDE integrierten Debuggers (wenn möglich) oder mittels poor mans debugging (System.out.println einbauen).
> 
> ...


Dankeschön  Werde ich für das nächste mal beherzigen


----------

