Es werden keine Einträge in der Datenbank gemacht

Kirby.exe

Top Contributor
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:

Java:
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:

12941

Log der Datenbank:

12942
 
Vielleicht steckt der Fehler ja an anderer Stelle, z. B. dort, wo MainDatabase genutzt wird...
Kann ich auch eben schicken 🙂

Java:
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) {
                    
                }
 
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?
 
Ergänzung:

hast du es erst einmal mit deinem Verbindungsstring und dem von MySQL - Documentation:
Code:
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:
Code:
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.
 
Was mir in deinem Code auffällt, bin mir jetzt nicht sicher - nicht nachgeschaut:
Code:
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.

Das könnte sehr gut der Fall sein... 🙂 Wait ich schaue eben nach welchen Connector ich benutze
 
Vielleicht hilft euch das weiter 🙂 Ich benutze den Connector:

12943

Also wenn ich den driver von dir verwende bekomme ich die folgende Fehlermeldung:
Code:
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 🙂
 
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.
 
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 🙂
 
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.
 
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.
Ok dann werde ich das mal etwas umschreiben 🙂 Habe jetzt auch alle Catch Blocks gefüllt
 
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:

Java:
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:

12944
 
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 ...
 
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 🙂
 
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.
 
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.
Dankeschön 🙂 Werde ich für das nächste mal beherzigen 🙂
 

Zurück
Oben