MySQL Datenbankabfrage mit Eingabe aus Textfeld vergleichen

Hallo zusammen,
ich programmiere momentan einen Vokabeltrainer mit Java.
Der Benutzer kann bis jetzt, mit Hilfe eines Textfeldes, Vokabeln eingeben und diese werden in der Datenbank gespeichert.
Nun hab ich 2 Probleme:
1. Bei Abfrage der Vokabeln aus der Datenbank, zeigt das Textfeld nur die zuletzt eingegebene Vokabel an. Wie schaff ich es, dass jeweils zufällig eine Vokabel aus der Datenbank angezeigt wird?
Und das ist die Hauptfrage:
2. Wie schaffe ich es, dass die aus der Datenbank entnommene englische Vokabel mit der im anderen Textfeld eingegebenen deutschen Vokabel verglichen wird?
Ich bin dankbar für jede Hilfe 🙂
Hier mein Code:

Java:
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Vokabeltrainer implements ActionListener {

    JFrame jf1;
    JFrame jf2;
    JFrame jf3;
    JTextField tf1;
    JTextField tf2;
    JTextField tf3;
    JTextField tf4;
    JTextField tf5;
    JTextField tf6;
    JButton b1;
    JButton b2;
    JButton b3;
    JButton b4;
    JButton b5;
    JButton b6;
    JLabel jl1;
    JLabel jl2;
    JLabel jl3;
    Statement stmt;
    String evokabel;
    ResultSet rs;

    public static void main(String[] args) {
        new Vokabeltrainer();
    }

    public Vokabeltrainer(){

//Startfenster      
      
        jf1 = new JFrame();
        jf1.setSize(1000, 800);
        jf1.setLayout(null);
        jf1.setResizable(false);
        jf1.setTitle("Vokabeltrainer");
        jf1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      
        tf1 = new JTextField();
        tf1.setBounds(200, 150, 600, 100);
        tf1.setText("Wilkommen! Was möchtest du tun?");
        Font font1 = new Font("SansSerif", Font.BOLD, 28);
        tf1.setFont(font1);
        tf1.setHorizontalAlignment(JTextField.CENTER);
        tf1.setEditable(false);
        jf1.add(tf1);
      
        b1 = new JButton();
        b1.setBounds(150, 400, 200, 100);
        b1.setText("Trainieren!");
        b1.addActionListener(this);
        b1.setEnabled(true);
        jf1.add(b1);
      
        b2= new JButton();
        b2.setBounds(650,400,200,100);
        b2.setText("Neue Vokabeln Hinzufügen");
        b2.addActionListener(this);
        b2.setEnabled(true);
        jf1.add(b2);
      
//Fenster zum Abfragen der Vokabeln  

        jf2 = new JFrame();
        jf2.setSize(600,400);
        jf2.setLayout(null);
        jf2.setVisible(false);
        jf2.setTitle("Lass uns trainieren!");
        jf2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      
        jl3 = new JLabel();
        jl3.setBounds(180,50,200,50);
        jl3.setText("Übersetze folgende Vokabel:");
        jf2.add(jl3);
      
//Textfeld zum Anzeigen der Vokabel aus der Datenbank      
      
        tf5 = new JTextField();
        tf5.setBounds(180, 100, 200, 50);
        tf5.setEditable(false);
        tf5.setText("");
        jf2.add(tf5);
      
//Textfeld zum Eingeben der Übersetzung      
      
        tf6 = new JTextField();
        tf6.setBounds(180, 200, 200, 50);
        tf6.setEditable(true);
        jf2.add(tf6);

        b5 = new JButton();
        b5.setBounds(180,280,80,50);
        b5.setText("Prüfen");
        b5.addActionListener(this);
        jf2.add(b5);
      
        b6 = new JButton();
        b6.setBounds(300,280,80,50);
        b6.setText("Weiter");
        b6.addActionListener(this);
        jf2.add(b6);
      
//Fenster zum Eingeben der Vokabeln  

        jf3 = new JFrame();
        jf3.setSize(600,400);
        jf3.setLayout(null);
        jf3.setVisible(false);
        jf3.setTitle("Vokabeltrainer");
        jf3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      
        jl1 = new JLabel();
        jl1.setBounds(150, 150, 100, 30);
        jl1.setText("Deutsch:");
        jl1.setHorizontalAlignment(JLabel.CENTER);
        jf3.add(jl1);

        tf2 = new JTextField();
        tf2.setBounds(300, 150, 100, 30);
        tf2.setEditable(true);
        jf3.add(tf2);
      
        jl2 = new JLabel();
        jl2.setBounds(150, 200, 100, 30);
        jl2.setText("Englisch:");
        jl2.setHorizontalAlignment(JLabel.CENTER);
        jf3.add(jl2);

        tf3 = new JTextField();
        tf3.setBounds(300, 200, 100, 30);
        tf3.setEditable(true);
        jf3.add(tf3);


        tf4 = new JTextField();
        tf4.setBounds(50, 50, 500, 50);
        tf4.setText("Gebe hier deine Vokabeln ein:");
        Font font2 = new Font("SansSerif", Font.BOLD, 28);
        tf4.setFont(font2);
        tf4.setHorizontalAlignment(JTextField.CENTER);
        tf4.setEditable(false);
        jf3.add(tf4);

        b3 = new JButton();
        b3.setBounds(300,250,150,50);
        b3.setText("Übernehmen");
        b3.addActionListener(this);
        jf3.add(b3);

        b4 = new JButton();
        b4.setBounds(5,5,100,30);
        b4.setText("Zurück");
        b4.addActionListener(this);
        jf3.add(b4);
      
      
        jf1.setVisible(true);
      
        try
        {
            load_con();
        }
        catch(Exception e) { e.printStackTrace(); }
    }
    private void load_con() throws Exception
    {
        Connection con=DriverManager.getConnection("jdbc:mysql://localhost/vokabeln?user=root&password=");
        stmt=con.createStatement();
        try {
            ResultSet rs = stmt.executeQuery("SELECT englisch FROM Vokabelliste");
            while(rs.next()){
            tf5.setText(""+rs.getString("englisch"));  
            }
        } catch (SQLException e) {
            System.out.println("Fehler!");
        }
    }

    public void actionPerformed(ActionEvent a) {
        String cmd = a.getActionCommand();
        if(cmd.equals("Trainieren!")){
            jf1.setVisible(false);
            jf2.setVisible(true);
        }
        if(cmd.equals("Neue Vokabeln Hinzufügen")){
            jf1.setVisible(false);
            jf3.setVisible(true);
        }
        if(cmd.equals("Zurück")){
            jf3.setVisible(false);
            jf1.setVisible(true);
        }
      
//Nach bedienen des Buttons werden deutsche und englische Vokabel in der Datenbank gespeichert      
      
        if(cmd.equals("Übernehmen")){
            String eingabe = tf2.getText();
            tf2.setText("");

            String eingabe1 = tf3.getText();
            tf3.setText("");

            try{
                stmt.executeUpdate("insert into Vokabelliste (deutsch, englisch) value ('"+eingabe+"','"+eingabe1+"')");
            }
            catch(Exception ex)
            {
                ex.printStackTrace();
            }
            tf2.setText("");
            tf3.setText("");
          
        }
        if(cmd.equals("Prüfen")){
        }
      
        if(cmd.equals("Weiter")){
            tf5.setText("");
            jf2.repaint();
            jl3.repaint();
          
//Eine englische Vokabel soll aus der Datenbank genommen werden und in Textfeld5 hinzugefügt          
          
            try {
                ResultSet rs = stmt.executeQuery("SELECT englisch FROM Vokabelliste");
                while(rs.next()){
                tf5.setText(""+rs.getString("englisch"));  
                }
            } catch (SQLException e) {
                System.out.println("Fehler!");
            }
        }
    }
}
 
Zuletzt bearbeitet:
angenommen deine Datenbank sieht so aus..
Code:
create table if not exists <schema>.Vokabelliste
(
    v_id int not null,
    englisch varchar(500),
    deutsch varchar(500),
    constraint  pk_vok primary key(v_id)
);
dann könntest du mit `where`wie folgt arbeiten...
Code:
select englisch from Vokabelliste where deutsch=@wort;
 
select englisch from Vokabelliste where deutsch=@wort;
Ich hab es nun so versucht, jedoch funktioniert es noch nicht 100%ig.
Das Programm soll die aus der Datenbank entnommene Vokabel in TextFeld5 mit der eingegebenen Vokabel in TextFeld6 vergleichen. Jedoch hab ich keinen weiteren Ansatz wie ich das umsetzten soll.
Hat jemand einen Vorschlag wie ich das Problem beheben kann?
Hier mein erweiterter Code:
Java:
public class Vokabeltrainer implements ActionListener {

    JFrame jf1;
    JFrame jf2;
    JFrame jf3;
    JTextField tf1;
    JTextField tf2;
    JTextField tf3;
    JTextField tf4;
    JTextField tf5;
    JTextField tf6;
    JButton b1;
    JButton b2;
    JButton b3;
    JButton b4;
    JButton b5;
    JButton b6;
    JLabel jl1;
    JLabel jl2;
    JLabel jl3;
    Statement stmt;
    String evokabel;
    ResultSet rs;
    String englisch;
    String deutsch;
    boolean richtig = false;

    public static void main(String[] args) {
        new Vokabeltrainer();
    }

    public Vokabeltrainer(){

//Startfenster       
       
        jf1 = new JFrame();
        jf1.setSize(1000, 800);
        jf1.setLayout(null);
        jf1.setResizable(false);
        jf1.setTitle("Vokabeltrainer");
        jf1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
        tf1 = new JTextField();
        tf1.setBounds(200, 150, 600, 100);
        tf1.setText("Wilkommen! Was möchtest du tun?");
        Font font1 = new Font("SansSerif", Font.BOLD, 28);
        tf1.setFont(font1);
        tf1.setHorizontalAlignment(JTextField.CENTER);
        tf1.setEditable(false);
        jf1.add(tf1);
       
        b1 = new JButton();
        b1.setBounds(150, 400, 200, 100);
        b1.setText("Trainieren!");
        b1.addActionListener(this);
        b1.setEnabled(true);
        jf1.add(b1);
       
        b2= new JButton();
        b2.setBounds(650,400,200,100);
        b2.setText("Neue Vokabeln Hinzufügen");
        b2.addActionListener(this);
        b2.setEnabled(true);
        jf1.add(b2);
       
//Fenster zum Abfragen der Vokabeln   

        jf2 = new JFrame();
        jf2.setSize(600,400);
        jf2.setLayout(null);
        jf2.setVisible(false);
        jf2.setTitle("Lass uns trainieren!");
        jf2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
        jl3 = new JLabel();
        jl3.setBounds(180,50,200,50);
        jl3.setText("Übersetze folgende Vokabel:");
        jf2.add(jl3);
       
//Textfeld zum Anzeigen der Vokabel aus der Datenbank       
       
        tf5 = new JTextField();
        tf5.setBounds(180, 100, 200, 50);
        tf5.setEditable(false);
        tf5.setText("");
        jf2.add(tf5);
       
//Textfeld zum Eingeben der Übersetzung       
       
        tf6 = new JTextField();
        tf6.setBounds(180, 200, 200, 50);
        tf6.setEditable(true);
        jf2.add(tf6);

        b5 = new JButton();
        b5.setBounds(180,280,80,50);
        b5.setText("Prüfen");
        b5.addActionListener(this);
        jf2.add(b5);
       
        b6 = new JButton();
        b6.setBounds(300,280,80,50);
        b6.setText("Weiter");
        b6.addActionListener(this);
        jf2.add(b6);
       
//Fenster zum Eingeben der Vokabeln   

        jf3 = new JFrame();
        jf3.setSize(600,400);
        jf3.setLayout(null);
        jf3.setVisible(false);
        jf3.setTitle("Vokabeltrainer");
        jf3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
        jl1 = new JLabel();
        jl1.setBounds(150, 150, 100, 30);
        jl1.setText("Deutsch:");
        jl1.setHorizontalAlignment(JLabel.CENTER);
        jf3.add(jl1);

        tf2 = new JTextField();
        tf2.setBounds(300, 150, 100, 30);
        tf2.setEditable(true);
        jf3.add(tf2);
       
        jl2 = new JLabel();
        jl2.setBounds(150, 200, 100, 30);
        jl2.setText("Englisch:");
        jl2.setHorizontalAlignment(JLabel.CENTER);
        jf3.add(jl2);

        tf3 = new JTextField();
        tf3.setBounds(300, 200, 100, 30);
        tf3.setEditable(true);
        jf3.add(tf3);


        tf4 = new JTextField();
        tf4.setBounds(50, 50, 500, 50);
        tf4.setText("Gebe hier deine Vokabeln ein:");
        Font font2 = new Font("SansSerif", Font.BOLD, 28);
        tf4.setFont(font2);
        tf4.setHorizontalAlignment(JTextField.CENTER);
        tf4.setEditable(false);
        jf3.add(tf4);

        b3 = new JButton();
        b3.setBounds(300,250,150,50);
        b3.setText("Übernehmen");
        b3.addActionListener(this);
        jf3.add(b3);

        b4 = new JButton();
        b4.setBounds(5,5,100,30);
        b4.setText("Zurück");
        b4.addActionListener(this);
        jf3.add(b4);
       
       
        jf1.setVisible(true);
       
        try
        {
            load_con();
        }
        catch(Exception e) { e.printStackTrace(); }
    }
    private void load_con() throws Exception
    {
        Connection con=DriverManager.getConnection("jdbc:mysql://localhost/vokabeln?user=root&password=");
        stmt=con.createStatement();
        try {
            ResultSet rs = stmt.executeQuery("SELECT englisch FROM Vokabelliste order by rand() limit 1");
            if(rs.next()){
            tf5.setText(""+rs.getString("englisch"));   
            }
        } catch (SQLException e) {
            System.out.println("Fehler!");
        }
    }

    public void actionPerformed(ActionEvent a) {
        String cmd = a.getActionCommand();
        if(cmd.equals("Trainieren!")){
            jf1.setVisible(false);
            jf2.setVisible(true);
        }
        if(cmd.equals("Neue Vokabeln Hinzufügen")){
            jf1.setVisible(false);
            jf3.setVisible(true);
        }
        if(cmd.equals("Zurück")){
            jf3.setVisible(false);
            jf1.setVisible(true);
        }
       
//Nach bedienen des Buttons werden deutsche und englische Vokabel in der Datenbank gespeichert       
       
        if(cmd.equals("Übernehmen")){
            String eingabe = tf2.getText();
            tf2.setText("");

            String eingabe1 = tf3.getText();
            tf3.setText("");

            try{
                stmt.executeUpdate("insert into Vokabelliste (deutsch, englisch) value ('"+eingabe+"','"+eingabe1+"')");
            }
            catch(Exception ex)
            {
                ex.printStackTrace();
            }
            tf2.setText("");
            tf3.setText("");
           
        }
        if(cmd.equals("Prüfen")){
               
                try{
                    System.out.println("prüfen wird ausgeführt");
                    ResultSet rs = stmt.executeQuery("SELECT deutsch, englisch FROM Vokabelliste where deutsch='" + deutsch +"' and englisch='" + englisch + "'");
                    while(rs.next()){
                        richtig = true;
                        tf6.setText("");
                        System.out.println("Richtig!");
                }
                }catch(Exception e) {
                    System.out.println("Fehler!");
                }
        }
       
        if(cmd.equals("Weiter")){
            tf5.setText("");
            jf2.repaint();
            jl3.repaint();
           
//Eine englische Vokabel soll aus der Datenbank genommen werden und in Textfeld5 hinzugefügt           
           
            try {
                ResultSet rs = stmt.executeQuery("select englisch from Vokabelliste order by rand() limit 1");
                while(rs.next()){
                tf5.setText(""+rs.getString("englisch"));   
                }
            } catch (SQLException e) {
                System.out.println("Fehler!");
            }
        }
    }
}
 
Strings vergleichst du mit equals.

if(str1. equals(str2) ==true)

Auf die werte von textfeldern greifst du mit getText() zu 😉
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben