# SQL-Exception: Column not found



## Kirby.exe (28. Jan 2020)

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:


```
/*================= 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:


```
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();
                }
            }
```


----------



## TM69 (28. Jan 2020)

Momentan siehts so das, in der Tabelle login kein Feld "username" existiert, allerdings wo und wie wird "connection" initialisiert?


```
Connection conn = connection.getConnection();
```


----------



## Kirby.exe (28. Jan 2020)

TM69 hat gesagt.:


> Momentan siehts so das, in der Tabelle login kein Feld "username" existiert, allerdings wo und wie wird "connection" initialisiert?
> 
> 
> ```
> ...


Connection wird in einer anderen Klasse initialisiert und besteht auch

Hier ein Screenshot vom Table:


Hier ist das komplette Log:



Spoiler: log





```
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ö!
```


----------



## mrBrown (28. Jan 2020)

Ist `SELECT ? FROM login WHERE username=?` überhaupt eine gültige Query?


----------



## fhoffmann (28. Jan 2020)

Wenn du die Abfrage stellst:

```
SELECT email FROM login WHERE username='Peter'
```
kannst du nicht erwarten, dass im ResultSet der username enthalten ist:

```
resulter = result.getString("username");
```


----------



## LimDul (28. Jan 2020)

> Connected
> Table successfully created
> Connected
> Ich konnte noch zuweisen !
> ...


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:


```
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.


----------



## Kirby.exe (28. Jan 2020)

fhoffmann hat gesagt.:


> Wenn du die Abfrage stellst:
> 
> ```
> SELECT email FROM login WHERE username='Peter'
> ...


Oh well meine Augen lassen nach...  Danke  Das war der Fehler, jetzt geht alles


----------

