# Datenbank werte vergleichen



## MaxG. (23. Mrz 2017)

Hi,
nachdem ich erste erfolge mit Access im Thema Datenbankprogrammierung erzielt habe, wollte ich nun einen Vokabeltrainer Programmieren. Dieser Speichert werte in einer Datenbank. Problem nur wenn ich die Abfrage starte und den Datenbankeintrag mit dem Eintrag in meinem Textfeld vergleiche kommt immer falsch raus obwohl mann es richtig eingegeben hat. Bin komplett ratlos. Was hab ich falsch gemacht oder wie muss ich es machen.


```
package Gui;

import java.awt.BorderLayout;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;

public class MainFrame extends JFrame{ 
    public JMenuBar menuBar;
    public JMenuItem mainMenu;
    public JMenuItem settings;
    public JMenuItem close;
    public JMenu data;
 
    public JPanel view;
 
    public MainMenu mainmenu = new MainMenu();
    public AddWords addWords = new AddWords();
    public StartQuery startQuery = new StartQuery();
    public SettingsPanel settingsPanel = new SettingsPanel();
  
    public MainFrame(){
        this.setTitle("Vokabeltrainer");
        this.setSize(400,300);
       
        view = new JPanel();
        view.setLayout(new BorderLayout());
       
        menuBar = new JMenuBar();
   
        mainMenu = new JMenuItem("Hauptmenü");
        data = new JMenu("Datei");
        settings = new JMenuItem("Einstellungen");
        close = new JMenuItem("Schließen");
   
        menuBar.add(data);
        menuBar.add(mainMenu);
        menuBar.add(settings);
        menuBar.add(close);
   
        view.add(mainmenu);
   
        this.setJMenuBar(menuBar);
        this.add(view);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
 
    public void listener(){
        mainmenu.addWords.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                System.out.println("Add Words");
                view.removeAll();
                view.repaint();
                view.add(addWords);
                view.revalidate();
            }
        });
   
        mainmenu.startQuery.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                System.out.println("Start Query");
                view.removeAll();
                view.repaint();
                view.add(startQuery);
                view.revalidate();
            }
        });
   
        mainMenu.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                System.out.println("mainMenu");
                view.removeAll();
                view.repaint();
                view.add(mainmenu);
                view.revalidate();
            }
        });
       
        close.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                System.exit(1);
            }
        });
   
        settings.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                System.out.println("Settings Panel");
                view.removeAll();
                view.repaint();
                view.add(settingsPanel);
                view.revalidate();
            }
        });
        addWords.listener();
        startQuery.listener();
    }

    public void showMainFrame(){
        this.setVisible(true);
    }
}
```


```
package Gui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class MainMenu extends JPanel{
    public JButton addWords;
    public JButton startQuery;
 
    public JPanel buttons;
 
    public JLabel north;
    public JLabel south;
    public JLabel west;
    public JLabel east;
 
    public MainMenu(){
        this.setLayout(new BorderLayout());
        this.setBackground(new Color(107, 107, 107));
   
        buttons = new JPanel();
        buttons.setLayout(new GridLayout(1, 2, 10, 10));
        buttons.setBackground(new Color(107, 107, 107));
   
        addWords = new JButton("Wörter hinzüfügen");
        addWords.setBackground(new Color(0, 170, 205));
        startQuery = new JButton("Abfrage starten");
        startQuery.setBackground(new Color(0, 170, 205));
   
        buttons.add(startQuery);
        buttons.add(addWords);
   
        north = new JLabel(" ");
        south = new JLabel(" ");
        west = new JLabel("          ");
        east = new JLabel("          ");
   
        this.add(buttons, BorderLayout.CENTER);
        this.add(north, BorderLayout.NORTH);
        this.add(south, BorderLayout.SOUTH);
        this.add(west, BorderLayout.WEST);
        this.add(east, BorderLayout.EAST);
    }
}
```


```
package Gui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.Border;

import Core.DatenbankInput;

public class AddWords extends JPanel{
    JLabel deutsch;
    JLabel english;
 
    JTextField textfieldEnglish;
    JTextField textfieldDeutsch;
  
    JPanel button;
    JPanel paneltextfield;
    JPanel panelLabel;
 
    JButton add;
    JButton cancel;

    Color background = new Color(107, 107, 107);
 
    public AddWords(){
        this.setLayout(new BorderLayout());
        this.setBackground(background);
   
        paneltextfield = new JPanel();
        paneltextfield.setLayout(new FlowLayout());
        paneltextfield.setBackground(background);
   
        panelLabel = new JPanel();
        panelLabel.setLayout(new FlowLayout());
        panelLabel.setBackground(background);
   
        deutsch = new JLabel("Bitte Deutscheswort eingeben");
        english = new JLabel("Bitte Englischeswort eingeben");
   
        textfieldEnglish = new JTextField(15);
        textfieldDeutsch = new JTextField(15);
   
        panelLabel.add(english);
        panelLabel.add(deutsch);
        paneltextfield.add(textfieldEnglish);   
        paneltextfield.add(textfieldDeutsch);
   

        button = new JPanel();
        button.setLayout(new FlowLayout(FlowLayout.RIGHT));
        button.setBackground(background);
   
        add = new JButton("Hinzufügen");
        cancel = new JButton("Abbrechen");
   
        button.add(add);
        button.add(cancel);
   

        this.add(panelLabel, BorderLayout.NORTH);
        this.add(paneltextfield, BorderLayout.CENTER);
        this.add(button, BorderLayout.SOUTH);
    }
 
    public void listener(){
        cancel.addActionListener(new ActionListener() {       
            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                System.out.println("Eingabe Abgrbrochen");
                textfieldEnglish.setText(null);
                textfieldDeutsch.setText(null);
            }
        });
   
        add.addActionListener(new ActionListener() {       
            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                System.out.println("Eingabe gespeichert");
                DatenbankInput databaseInput = new DatenbankInput(textfieldDeutsch.getText(), textfieldEnglish.getText());
            }
        });
    } 
}
```


```
package Gui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.Socket;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.Border;

import Core.DatenbankOutput;

public class StartQuery extends JPanel{
    Border blackBorder;
 
    JLabel deutscheswort;
    JLabel deutscheswort1;
    JLabel englischeswort1;
 
    JTextField englischeswort;
 
    JButton check;
 
    boolean startStatus = true;
    boolean checkStatus = true;
 
    JPanel buttons;
    JPanel input;
    JPanel controll;
 
    DatenbankOutput databaseOutput = new DatenbankOutput();
    String[] results = new String[2];
 
    public StartQuery(){
        this.setLayout(new BorderLayout());
        this.setBackground(new Color(107, 107, 107));
   
        buttons = new JPanel();
        buttons.setLayout(new FlowLayout());
        buttons.setBackground(new Color(107, 107, 107));
   
        check = new JButton("Abfrage Starten");
   
        buttons.add(check);   
   
        input = new JPanel();
        input.setLayout(new GridLayout(2, 2, 2, 2));
        input.setBackground(new Color(107, 107, 107));
   
        deutscheswort = new JLabel("");
        deutscheswort1 = new JLabel("Deutscheswort:");
        englischeswort1 = new JLabel("Englischeswort:");
        englischeswort = new JTextField(15);
   
        input.add(deutscheswort1);
        input.add(englischeswort1);
        input.add(deutscheswort);
        input.add(englischeswort);
       
        controll = new JPanel();
        controll.setLayout(new FlowLayout());
        controll.setBackground(new Color(107, 107, 107));
       
        this.add(input, BorderLayout.NORTH);
        this.add(controll, BorderLayout.CENTER);
        this.add(buttons, BorderLayout.SOUTH);
    } 
 
    public void listener(){
        check.addActionListener(new ActionListener() {       
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                results = databaseOutput.getWords(1);
                String deutschesWort = results[0];
                RightPanel rightPanel;
                WrongPanel wrongPanel;
           
                if(startStatus == false && checkStatus == true){               
                    if(englischeswort.getText() == results[0]){
                        System.out.println(englischeswort.getText());
                        System.out.println(results[0]);
                        controll.removeAll();
                        repaint();
                        controll.add(rightPanel = new RightPanel("Herzlichen Glückwunsch, richtige Eingabe"));
                        revalidate();
                        englischeswort.setText(null);
                    }else{
                        controll.removeAll();
                        repaint();
                        controll.add(wrongPanel = new WrongPanel("Leider falsch, " + results[1] + " währe es gewesen"));
                        revalidate();
                        englischeswort.setText(null);
                    }               
                    checkStatus = false;
                    check.setText("Nächstes");
                }
           
                if(startStatus == false && checkStatus == false){
                    results = databaseOutput.getWords(1);
                    deutscheswort.setText(deutschesWort);
                    checkStatus = true;
                    check.setText("Überprüfen");
                }
           
                if(startStatus == true &&  checkStatus == true){
                    results = databaseOutput.getWords(1);
                    deutscheswort.setText(deutschesWort);
                    startStatus = false;
                    check.setText("Überprüfen");
                }
            }
        });   
    }
}
```


```
package Gui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;

import javax.swing.JComboBox;
import javax.swing.JPanel;

public class SettingsPanel extends JPanel{
    JPanel color;
    JPanel language;
 
    JComboBox<String> languageCombobox;
    JComboBox<String> colorCombobox;
 
    public SettingsPanel(){
        this.setLayout(new GridLayout(2, 1));
        this.setBackground(new Color(107, 107, 107));
   
        color = new JPanel();
        color.setLayout(new BorderLayout());
   
        colorCombobox = new JComboBox<>();
   
        color.add(colorCombobox, BorderLayout.CENTER);
       
        language = new JPanel();
        language.setLayout(new BorderLayout());
   
        languageCombobox = new JComboBox<>();
   
        language.add(languageCombobox, BorderLayout.CENTER);
    }
}
```


```
package Gui;

import java.awt.BorderLayout;
import java.awt.Color;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class RightPanel extends JPanel{ 
    JLabel icon;
    JLabel text;
  
    public RightPanel(String richtig){
        this.setBackground(new Color(100, 255, 100));
        this.setLayout(new BorderLayout());
   
        icon = new JLabel();
        icon.setIcon(new ImageIcon("C:/Users/grohmann/workspace/Vokabeltrainer/src/Check-icon.png"));
   
        text = new JLabel();
        text.setText(richtig);
   
        this.add(icon, BorderLayout.WEST);
        this.add(text, BorderLayout.CENTER);
    }
}
```


```
package Gui;

import java.awt.BorderLayout;
import java.awt.Color;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class WrongPanel extends JPanel{
    JLabel icon;
    JLabel text;
  
    public WrongPanel(String fehler){
        this.setBackground(new Color(255, 93, 93));
        this.setLayout(new BorderLayout());
   
        icon = new JLabel();
        icon.setIcon(new ImageIcon("C:/Users/grohmann/workspace/Vokabeltrainer/src/red-cross-icon.png"));
   
        text = new JLabel();
        text.setText(fehler);
   
        this.add(icon, BorderLayout.WEST);
        this.add(text, BorderLayout.CENTER);
    }
}
```


```
package Run;

import Gui.MainFrame;

public class RunProgramm {
    public static void main(String[] args) {
        MainFrame frame = new MainFrame();
        frame.showMainFrame();
        frame.listener();
    }
}
```


```
package Core;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DatenbankOutput {
    Connection connection;
    Statement statement;
    ResultSet results;
 
    int status;
 
    String deutscheswort, englischeswort;
    String[] rückgabe = new String[2];
    String driverClass = "sun.jdbc.odbc.JdbcOdbcDriver";
    String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=" + "C:/Users/grohmann/workspace/Vokabeltrainer/src/Vokabeltrainer.accdb";
  
    public DatenbankOutput(){   
    }
 
    public String[] getWords(int id){
        String query = "SELECT Deutscheswort, Englischeswort FROM Tabelle1 WHERE ID=" + id;
   
        try{
            Class.forName(driverClass);
        }catch(ClassNotFoundException e){
            e.printStackTrace();
            System.out.println("Fehler beim Laden der Klasse");
        }
   
        try{
            connection = DriverManager.getConnection(url);
        }catch(SQLException e){
            e.printStackTrace();
            System.out.println("Fehler beim Aufbau der Verbindung zur Datenbank");
        }
   
        try{
            statement = connection.createStatement();
        }catch(SQLException e){
            e.printStackTrace();
            System.out.println("Fehler beim erstellen des Statements");
        }
   
        try{
            results = statement.executeQuery(query);
        }catch(SQLException e){
            e.printStackTrace();
            System.out.println("Fehler beim befüllen des Resultset");
        }
   
   
        try{
            results.next();
            deutscheswort = results.getString(1);
            englischeswort = results.getString(2);
        }catch(SQLException e){
            e.printStackTrace();
            System.out.println("Fehler beim auslesen des Resultset");
        }
   
        rückgabe[0] = deutscheswort;
        rückgabe[1] = englischeswort;
   
   
   
        try{
            results.close();
            status = 1;
            statement.close();
            status = 2;
            connection.close();
            status = 3;
        }catch(SQLException e){
            e.printStackTrace();
            System.out.println("Fehler beim schließen der Datenbank Status: " + status);
        }
   
        return rückgabe;
    }
}
```




```
package Core;

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

public class DatenbankInput {

    Connection connection;
    Statement statement;
    int status;
 
    String driverClass = "sun.jdbc.odbc.JdbcOdbcDriver";
    String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=" + "C:/Users/grohmann/workspace/Vokabeltrainer/src/Vokabeltrainer.accdb";
 
 
    public DatenbankInput() {

    }

 
    public DatenbankInput(String deutscheswort, String englischeswort) {
        String query = "INSERT INTO Tabelle1(Deutscheswort, EnglischesWort) VALUES('" + deutscheswort +"' , '" + englischeswort + "')";
   
        try {
            Class.forName(driverClass);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("Fehler beim Laden der Klasse");
        }
   
        try {
            connection = DriverManager.getConnection(url);
        } catch (SQLException e) {
            System.out.println("Connection fehlgeschlagen");
            e.printStackTrace();
        }
   
        try {
            statement = connection.createStatement();
        } catch (SQLException e) {
            System.out.println("Statement fehlgeschlagen");
        }
   
        try {
            status = statement.executeUpdate(query);
            System.out.println("Status: " + status);
        } catch (SQLException e) {
            System.out.println("Query Fehlgeschlagen");
            e.printStackTrace();
        }
   
   
        try {
            statement.close();
        } catch (SQLException e) {
            System.out.println("Fehler beim schließen des Statement");
        }
   
        try{
            connection.close();
        }catch (SQLException e) {
            System.out.println("Fehler beim Schließen der Connection");
            e.printStackTrace();
        }
    }
 
 
    public DatenbankInput(String deutscheswort, String englischeswort, int anzahleingaben, int falscheingaben, int korrekteeingaben) {   
   
    }
}
```


----------



## Joose (23. Mrz 2017)

Strings werden mit `equals` verglichen nicht mit "==" 
`equals` vergleicht inhaltlich, "==" die Referenz


----------



## MaxG. (23. Mrz 2017)

Total vergessen, habs jetzt ausgetauscht.

```
if(englischeswort.getText().equals( results[0])){
```

Problem ist das der Fehler immer noch auftritt.


----------



## MaxG. (23. Mrz 2017)

Ok sorry, nehme alles zurück hab die Array werte vertauscht

```
if(englischeswort.getText().equals( results[1])){
```


----------



## stg (23. Mrz 2017)

Lass dir doch mal ausgeben, was du tatsächlich vergleichst.

Edit: zu spät.


----------



## Joose (23. Mrz 2017)

Kleiner Tipp: Für solche Fehler kann man den Debugger eine IDE super gebrauchen.
Auch ein Logging Framework (oder simple Konsolenausgaben) können helfen.

Und versuche dein Fehler auf einen kleineren Bereich einzuschränken: nicht viele haben Lust hier 10 verschiedene Klassen durchzuschauen (wobei manche gar nichts mit dem Problem zu tun haben) 

Zu deinem Code: In DatenbankInput und DatenbankOutput solltest du nochmal überlegen ob 6 verschiedene try/catch Blöcke wirklich Sinn machen


----------

