Erste Schritte Insert Into klappt nicht

Creepaz

Bekanntes Mitglied
Hi,

stehe gerade auf dem Schlauch. Ich habe eine Funktion um einen Spieler zu registrieren, mit folgendem Code:

Java:
//Spieler in Datenbank einfügen
    boolean success;
   
    PreparedStatement ps = con.prepareStatement("insert into userdata (playerid, username, password, email, rang) VALUES (?, ?, ?, ?, ?)");
    ps.setString(1, playerid.toString());
    ps.setString(2, username);
    ps.setString(3, password);
    ps.setString(4, email);
    ps.setString(5, EnumSettings.Rank.Spieler.toString());
    success = stmt.execute();
   
    if(success == true) {
     JOptionPane.showMessageDialog(null, "Du hast dich erfolgreich registriert!"
       + "\n\nDu kannst dich nun anmelden!", "Registration", -1);
    
     FrameCreator.frameRegister.setVisible(false);
     FrameCreator.frameLogin.setVisible(true);
    } else {
     JOptionPane.showMessageDialog(null, "Bei der Registrierung ist ein Fehler aufgetreten!", "Registration", -1);
    }

Ich kriege die Meldung das ich mich erfolgreich registriert habe, allerdings wird es in die Datenbank gar nicht erst eingefügt. Die Connection habe ich weiter oben bereits aufgebaut.


Edit: Die Coverage zeigt ebenfalls an, dass dieser Code ausgeführt wurde 😵
 
Welche DB? Schließt Du das Statement auch wieder (Tipp: try-with-resources). Hast Du autocommit abgeschaltet? Dann müsstest Du den Commit explizit durchführen.
 
Geht um eine MySQL-DB. Ich poste hier mal den kompletten Code, ich weiss: das Passwort wird ist wegen Testzwecken noch unverschlüsselt!

Java:
public static void registerPlayer(String username, String password, String email) {
  UUID playerid = UUID.randomUUID();
  try {
   con = DriverManager.getConnection("jdbc:mysql://localhost/levelinggame?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC", "root", "");
   //Spielername überprüfen
   stmt = con.prepareStatement("select * from userdata where username = ?");
   stmt.setString(1, username);
   rs = stmt.executeQuery();
   
   boolean userExists = rs.next();
   
   if(userExists == true) {
    //Spieler existiert bereits, Nachricht an Spieler ausgeben
    JOptionPane.showMessageDialog(null,  "Der Spielername " + username + " ist bereits vergeben!"
      + "\n\nBitte wähle einen anderen Spielernamen!", "Ungültige Angaben", -1);
   } else {
    //Spieler in Datenbank einfügen
    boolean success;
    
    PreparedStatement ps = con.prepareStatement("insert into userdata (playerid, username, password, email, rang) VALUES (?, ?, ?, ?, ?)");
    ps.setString(1, playerid.toString());
    ps.setString(2, username);
    ps.setString(3, password);
    ps.setString(4, email);
    ps.setString(5, EnumSettings.Rank.Spieler.toString());
    success = stmt.execute();
    
    if(success == true) {
     JOptionPane.showMessageDialog(null, "Du hast dich erfolgreich registriert!"
       + "\n\nDu kannst dich nun anmelden!", "Registration", -1);
     
     FrameCreator.frameRegister.setVisible(false);
     FrameCreator.frameLogin.setVisible(true); 
    } else {
     JOptionPane.showMessageDialog(null, "Bei der Registrierung ist ein Fehler aufgetreten!", "Registration", -1);
    }
   }
   stmt.close();
   rs.close();
  } catch(SQLException e) {
   e.printStackTrace();
  }
 }
 
Oh.. ähm.. Ja.. da hätten wir es wieder, das gute alte Copy-Paste von der einen zur anderen Funktion ._. Danke dir ^^

Immer diese Leichtsinnsfehler, ich glaube ich kapier es nie ^^
 
Du solltest das alles aber etwas umstrukturieren und aufräumen (z. B. brauchst Du == true bei einem if nicht, da der Operant ja bereits ein boolescher Ausdruck sein muss).
 

Zurück
Oben