SQL-Exception: Column not found

Kirby.exe

Top Contributor
Also ich habe eine Methode geschrieben um halt zu überprüfen ob bestimmte Werte, welche über die GUI eingelesen werden, bereits in der DB existieren. Jedoch bekomme ich die Errormeldung: java.sql.SQLException: Column 'username' not found..

Die Methode:

Java:
/*================= check if username is already existend in DB ==================*/
    
    public boolean inputCheck(String username, String mode) throws SQLException, Exception{
        try {
            Connection conn = connection.getConnection();
            PreparedStatement getUser = conn.prepareStatement("SELECT ? FROM login WHERE username=?");
            getUser.setString(1, mode);
            getUser.setString(2, username);
            System.out.println("Ich konnte noch zuweisen !");
            
            String resulter = "";
            ResultSet result = getUser.executeQuery();
            if(result.next()){
                resulter = result.getString("username");
            }
            if(!resulter.equals("null")) {
                System.out.println(mode + " exists!");
                getUser.close();
                conn.close();
                return true;
            }else {
                System.out.println(mode +" nonexistent!");
                getUser.close();
                conn.close();
                return false;
            }
        } catch (SQLException ex) {
            // handle any database errors
            ex.printStackTrace();
            System.out.println("Error when loading username");
            System.out.println("SQLException: " + ex.getMessage());
            System.out.println("SQLState: " + ex.getSQLState());
            System.out.println("VendorError: " + ex.getErrorCode());
        }
        return false;
    }

Aufruf der Methode im GUI:

Java:
public void actionPerformed(ActionEvent e) {
                //saving login information in DB
                try {
                    MainDatabase data = new MainDatabase();
                    SecureHashAlgorithm algo = new SecureHashAlgorithm();
                    s_username = inputUsername.getText();
                    if(data.inputCheck(s_username, "username")) {
                        System.out.println("Den Benutzer gibt es schon");
                        lblThisUserAlready.setVisible(true);
                        userC = false;
                    }else {
                        lblThisUserAlready.setVisible(false);
                    }
                    s_email = inputEmail.getText();
                    if(data.inputCheck(s_email, "email")) {
                        System.out.println("Den Benutzer gibt es schon");
                        lblThisEmailAlready.setVisible(true);
                        emailC = false;
                    }else {
                        lblThisEmailAlready.setVisible(false);
                    }
                    if(inputPassword.getText().equals(inputPasswordConfirm.getText())) {
                        s_pw = inputPassword.getText();
                        lblThePasswordDoesnt.setVisible(false);
                        pwC = true;
                    }else {
                        System.out.println("Wrong password");
                        lblThePasswordDoesnt.setVisible(true);
                        pwC = false;
                    }
                    if(s_pw != null) {
                        s_pw = algo.secureHash(s_pw);
                    }
                    s_Birthday = inputBirthday.getText();
                    s_MtrNR = inputMtrNR.getText();
                    if(data.inputCheck(s_MtrNR, "mtrNr")) {
                        System.out.println("Den Benutzer gibt es schon");
                        lblThisStudentidExists.setVisible(true);
                        mtrnrC = false;
                    }else {
                        lblThisStudentidExists.setVisible(false);
                        mtrnrC = true;
                    }
                    if(userC && emailC && pwC && mtrnrC) {
                        data.addEntries(s_username, s_email, s_pw, s_Birthday, s_MtrNR);
                    }else {
                        System.out.println("Nö!");
                    }
                }catch(Exception ex) {
                    System.out.println("Es konnte nichts hinzugefügt werden");
                    ex.printStackTrace();
                }
            }
 
Momentan siehts so das, in der Tabelle login kein Feld "username" existiert, allerdings wo und wie wird "connection" initialisiert?

Code:
Connection conn = connection.getConnection();
 
Momentan siehts so das, in der Tabelle login kein Feld "username" existiert, allerdings wo und wie wird "connection" initialisiert?

Code:
Connection conn = connection.getConnection();
Connection wird in einer anderen Klasse initialisiert und besteht auch

Hier ein Screenshot vom Table:
12949

Hier ist das komplette Log:

Code:
Connected
Table successfully created
Connected
Ich konnte noch zuweisen !
username exists!
Den Benutzer gibt es schon
Connected
Ich konnte noch zuweisen !
java.sql.SQLException: Column 'username' not found.
Error when loading username
SQLException: Column 'username' not found.
SQLState: S0022
VendorError: 0
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
    at com.mysql.cj.jdbc.result.ResultSetImpl.findColumn(ResultSetImpl.java:548)
    at com.mysql.cj.jdbc.result.ResultSetImpl.getString(ResultSetImpl.java:852)
    at database.MainDatabase.inputCheck(MainDatabase.java:122)
    at javaPersonData.RegisterGUI$2.actionPerformed(RegisterGUI.java:185)
    at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
    at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
    at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
    at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
    at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
    at java.desktop/java.awt.Component.processMouseEvent(Component.java:6632)
    at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
    at java.desktop/java.awt.Component.processEvent(Component.java:6397)
    at java.desktop/java.awt.Container.processEvent(Container.java:2263)
    at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5008)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4840)
    at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
    at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
    at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
    at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2772)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4840)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Connected
Ich konnte noch zuweisen !
mtrNr exists!
Den Benutzer gibt es schon
Nö!
 
Wenn du die Abfrage stellst:
Code:
SELECT email FROM login WHERE username='Peter'
kannst du nicht erwarten, dass im ResultSet der username enthalten ist:
Code:
resulter = result.getString("username");
 
Connected
Table successfully created
Connected
Ich konnte noch zuweisen !
username exists!
Den Benutzer gibt es schon
Connected
Ich konnte noch zuweisen !
java.sql.SQLException: Column 'username' not found.
Der Auszug ist interessant. Das heißt, es ging 1x. Danach wurde neu verbunden es ging nicht mehr.

Dann schaue ich mir deinen zweiten Aufruf von data.inputCheck an:

Java:
s_email = inputEmail.getText();
                    if(data.inputCheck(s_email, "email"))
Da übergibst du als usernamen den Wert der E-Mail. Willst du das? Ich glaube nein.

Dann im Inputcheck:

resulter = result.getString("username");
Du selektierst aber nur die Spalte, die in "mode" drin steht. Und da steht beim Aufruf für die E-Mail nicht die Spalte username drin.

Sprich dein Resultset hat in dem Fall keine Spalte username - und daher kommt die Exception.
 
Wenn du die Abfrage stellst:
Code:
SELECT email FROM login WHERE username='Peter'
kannst du nicht erwarten, dass im ResultSet der username enthalten ist:
Code:
resulter = result.getString("username");
Oh well meine Augen lassen nach... 🙂 Danke 🙂 Das war der Fehler, jetzt geht alles
 

Neue Themen


Zurück
Oben